将 MongoDB 查询结果转换为 JSONArray

Posted

技术标签:

【中文标题】将 MongoDB 查询结果转换为 JSONArray【英文标题】:Convert MongoDB query result into JSONArray 【发布时间】:2015-10-14 03:08:45 【问题描述】:

我有一个通过 mongoose 进行的 MongoDB 查询,结果是:

[
  
    "tablename": "name1"
  ,
  
    "tablename": "name2"
  
]

但我需要它作为 JSONArray :


  "tablename": [
    "name1",
    "name2"
  ]

有没有简单的转换方法?

【问题讨论】:

【参考方案1】:

aggregation framework 可以为您创建所需的结果。考虑 $group$push 累加器运算符如下:

db.collection.aggregate([
    
        "$group": 
            "_id": null,
            "tablename": 
                "$push": "$tablename"
                       
        
    ,
    
        "$project": 
            "_id": 0, "tablename": 1
        
        
])

样本输出:

/* 0 */

    "result" : [ 
        
            "tablename" : [ 
                "name1", 
                "name2"
            ]
        
    ],
    "ok" : 1

您可以使用 aggregate() 方法在 mongoose 中实现此功能,例如:

var pipeline = [
        
            "$group": 
                "_id": null,
                "tablename": 
                    "$push": "$tablename"
                           
            
        ,
        
            "$project": 
                "_id": 0, "tablename": 1
            
            
    ]

Model.aggregate(pipeline).exec(function (err, res)
    console.log(res);
)

更新

更改此查询以使用聚合框架:

app.post('/getkost', function(request, response) 
    var kost = new RegExp(request.body.kost,'i'); 
    Move.find(
         tablename:  $regex: kost  ,
         tablename: 1, _id: 0 , 
        function(err, doc)  
            response.json(doc); 
    ); 
);

到这里:

app.post('/getkost', function(request, response) 
    var kost = new RegExp(request.body.kost, 'i'); 
    var pipeline = [
        
            "$match": 
                "tablename":  "$regex": kost 
            
        ,
        
            "$group": 
                "_id": null,
                "tablename": 
                    "$push": "$tablename"
                           
            
        ,
        
            "$project": 
                "_id": 0, "tablename": 1
            
        
    ]
    Move.aggregate(pipeline, function(err, res)  
        response.json(res); 
    ); 
);

【讨论】:

它也适用于查找查询?我不想更改任何数据 您能显示find() 查询吗?您可以将该查询替换为 $match 管道运算符。 app.post('/getkost', function(request,response) var kost = new RegExp(request.body.kost,'i'); Move.find(tablename: $ regex:kost,tablename: 1, _id: 0, function(err, doc) response.json(doc); ); ); @Piet 查看我的更新,这应该使用聚合框架为您提供所需的结果。 "$match" : SyntaxError: Unexpected token :【参考方案2】:

这应该适合你:

var json = [
    "tablename": "name1"
, 
    "tablename": "name2"
]

var arr = ;
json.forEach(function(value, key) 
    var tableName = Object.keys(json[key]);
    arr[tableName] = arr[tableName] || [];
    arr[tableName].push(value[tableName]);
);

console.log(arr);

Fiddle

请记住,Object.keys() 实际上会返回一个数组 - 如果您的数组包含多个键(例如 "tablename": "name1", "othertablename": "name2"

【讨论】:

【参考方案3】:

试试……

var inputArr = [
  
    "tablename": "name1"
  ,
  
    "tablename": "name2"
  
];

var jsonArr = "tablename": [];

for (var i = 0; i < inputArr.length; i++) 
  jsonArr.tablename.push(inputArr[i].tablename);

【讨论】:

以上是关于将 MongoDB 查询结果转换为 JSONArray的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SQLite 查询转换为 MongoDB 查询

将 MongoDB 查询转换为雪花

如何将sql查询转换为mongodb查询中的exists

如何将此 sql 查询转换为 mongodb?

将sql连接查询转换为mongodb

如何将此类 sql 查询转换为 mongodb 查询