【问题标题】:How to fetch the single field value of multiple documents in a collection MongoDB?如何在集合 MongoDB 中获取多个文档的单个字段值?
【发布时间】:2019-11-04 14:33:00
【问题描述】:

我有一组具有以下架构的文档:

{ 
    "_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" 
    }

]

【问题讨论】:

  • 你 consoel.log req.params.field 了吗?是否与 db 属性相同?
  • 是的,完全一样

标签: javascript node.js json mongodb nosql


【解决方案1】:

你要的对象错了

{
  "blue"
  "green"
  "yellow"
}

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

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

有两种方法使用聚合或操作结果

一种方式:

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

它返回你想要的数组,data是对象数组,函数map用于将对象重构为字符串。

第二种方法比第一种更容易,并且对代码的影响更小。

【讨论】:

    【解决方案2】:

    要将此作为响应,您必须在从 mongo 查询中获取数据后操作结果。

    var data = res.json(data), endResult = [];
    for(key in data) {
        endResult[key] = data[key]["Color"];
    }
    return endResult; 
    

    【讨论】:

      猜你喜欢
      • 2020-04-30
      • 2023-01-31
      • 2022-12-20
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 2018-04-21
      • 1970-01-01
      相关资源
      最近更新 更多