将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"}
)