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属性相同吗?是的,它是相同的