将 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的主要内容,如果未能解决你的问题,请参考以下文章