Javascript 如何获取集合MongoDB中多个文档的单个字段值?
我有一个具有以下架构的文档集合:Javascript 如何获取集合MongoDB中多个文档的单个字段值?,javascript,node.js,json,mongodb,nosql,Javascript,Node.js,Json,Mongodb,Nosql,我有一个具有以下架构的文档集合: { "_id" : ObjectId("8dcaac2eb104c2133d66f144"), "Shape" : "circle", "Color" : "blue" }, 我的目标是为一系列文档动态获取特定字段的值。对3个文档颜色值请求的响应应如下所示: { "blue" "green" "yellow" } 我正在使用Mongodb和nodejs,下面是我的代码: var field = req
{
"_id" : ObjectId("8dcaac2eb104c2133d66f144"),
"Shape" : "circle",
"Color" : "blue"
},
我的目标是为一系列文档动态获取特定字段的值。对3个文档颜色值请求的响应应如下所示:
{
"blue"
"green"
"yellow"
}
我正在使用Mongodb和nodejs,下面是我的代码:
var field = req.params.field
var field_option = {};
field_option[field] = 1;
db.collection.find({_id: {$gte: first, $lt: last}}, field_option).toArray(function(err, data){
if(err || !data) throw err;
res.json(data);
});
但是,输出是错误的:
[
{
"_id": "8dcaac2eb104c2133d66f144",
"Shape" : "circle",
"Color" : "blue"
},
{
"_id": "8dcaac2eb104c2133d66f145",
"Shape" : "square",
"Color" : "green"
},
{
"_id": "8dcaac2eb104c2133d66f146",
"Shape" : "triangle",
"Color" : "yellow"
}
]
要将其作为响应,您必须在从mongo查询获取数据后操作结果
var data = res.json(data), endResult = [];
for(key in data) {
endResult[key] = data[key]["Color"];
}
return endResult;
你想要的东西错了
{
"blue"
"green"
"yellow"
}
您需要在数组中管理结果
[
"blu",
"green",
"yellow",
]
有两种方法可以使用agregate或操纵结果
1路:
db.collection.aggregate([
{ $match: { _id: {$gte: first, $lt: last} }},
{ $group: { _id: "1", fields: { $push: { $concat: field }}}}
]);
它返回一个带有positions _id的对象,以及带有结果的字段。因为聚合的管道通过defautl值进行匹配和after分组,并将所需的字段放入数组中
2路:
使用贴图操纵结果
db.collection.find({_id: {$gte: first, $lt: last}}, field_option).toArray(function(err, data){
if(err || !data) throw err;
res.json(data.map(item => (item[field]);
});
它返回所需的数组,数据是对象的数组,函数映射用于将对象重新构造为字符串
第二种方法比第一种更简单,对代码的影响更小 您是否有consel.log
req.params.field
?它与db属性相同吗?是的,它是相同的