【问题标题】:Create a single document from multiple documents in MongoDB and Mongoose从 MongoDB 和 Mongoose 中的多个文档创建单个文档
【发布时间】:2016-05-14 23:14:22
【问题描述】:

我对 MongoDB 和 Mongoose 很陌生,偶然发现了以下问题: 我有一个包含大约 600 个这种(缩短)格式的文档的集合:

{ 
    _id: ObjectId(<Integer>),
    sA: [
        {
            age: {
                value: <Integer>
            }
        }
    ]
}

文档包含范围从 0 到大约 100 的年龄值,但并非所有值都被表示。 我想以

的形式输出一个单个Object
{
    labels: [<Integer>, <Integer>, ...],
    data:   [<Integer>, <Integer>, ...]
}

其中标签是包含所有文档的所有年龄值的数组。并且数据包含找到该年龄值的次数。

我的问题是:

  1. 由于我是数据库新手,MongoDB 甚至可以做到这一点吗?
  2. 如果是这样,是否也可以填补标签和数据数组内部的空白?可以说,输出如下所示:

    {
        labels: [0,1,2,6,9]
        data:   [1,17,4,5,3]
    }
    

但我希望它看起来像这样:

{
    labels: [0,1,2,3,4,5,6,7,8,9],
    data:   [1,17,4,0,0,0,5,0,0,3]
}

到目前为止,我无法使用聚合或 mapReduce 管道来归档这种格式。我必须分两步执行此操作吗?就像输出一个排序的数组,然后在服务器上使用 Javascript 函数来提取和填充数据和标签数组并在将对象发送回客户端之前填充空白?

提前谢谢你!!

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    我相信这就是您正在寻找的:

    db.collection.aggregate([
        { $unwind: "$sA" },
        { $group: {
            _id: "$sA.age.value",
            count: {$sum: 1}
        } },
        { $sort: {
            _id: 1
        }},
        { $group: {
            _id: null,
            labels: {
                $push: "$_id"
            },
            data: {
                $push: "$count"
            }
        }}
    ]);
    

    不过,我认为填充缺失值是不可能的。

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 2020-04-20
      • 2019-06-09
      • 1970-01-01
      • 2019-03-10
      • 2019-05-08
      • 1970-01-01
      • 2021-05-31
      • 2017-03-15
      相关资源
      最近更新 更多