将MongoDB查询结果转换成JSONArray

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

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

但我需要它作为JSONArray:

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

有没有简单的方法来转换?

聚合框架可以为您创build所需的结果。 考虑$group$push accumulator运算符,如下所示:

 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); }) 

UPDATE

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

 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); }); }); 

尝试…

 var inputArr = [ { "tablename": "name1" }, { "tablename": "name2" } ]; var jsonArr = {"tablename": []}; for (var i = 0; i < inputArr.length; i++) { jsonArr.tablename.push(inputArr[i].tablename); } 

这应该为你工作:

 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); 

小提琴

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