如何在集合MongoDB中获取多个文档的单个字段值?

我有一个具有以下架构的文档集合:

{ 
    "_id" : ObjectId("8dcaac2eb104c2133d66f144"),"Shape" : "circle","Color" : "blue" 
},

我的目标是为一系列文档动态获取特定字段的值。对3个文档的Color值的请求的响应应如下所示:

{
    "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","Color" : "blue" 
    },{
        "_id": "8dcaac2eb104c2133d66f145","Shape" : "square","Color" : "green" 
    },{
        "_id": "8dcaac2eb104c2133d66f146","Shape" : "triangle","Color" : "yellow" 
    }

]
jeff2mac 回答:如何在集合MongoDB中获取多个文档的单个字段值?

要对此做出响应,您必须在从mongo查询中获取数据后操纵结果。

function("Testabc",letter[2:5]) = 3
,

您想要的对象是错误的

{
  "blue"
  "green"
  "yellow"
}

您需要在数组中管理结果。

[
  "blu","green","yellow",]

使用汇总或操纵结果的两种方法

1种方式:

db.collection.aggregate([
  { $match: { _id: {$gte: first,$lt: last} }},{ $group: { _id: "1",fields: { $push: { $concat: field }}}}
]);

它返回位置为_id的对象,并返回结果的字段。因为聚合的管道进行匹配,然后按默认值分组,然后将所需字段放入数组

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

它将返回所需的数组,数据是对象的数组,并且函数映射用于将对象重新构造为字符串。

第二种方法比第一种更容易,对代码的影响也更少。

本文链接:https://www.f2er.com/3165965.html

大家都在问