【问题标题】:How to aggregate the values of a field into an array?如何将字段的值聚合到数组中?
【发布时间】:2020-10-01 00:58:26
【问题描述】:

让我们使用一个名为values 的集合,其中包含以下文档。

{ "_id" : 1, "name" : "value1", "x" : 1, "y" : 2 }
{ "_id" : 2, "name" : "value1", "x" : 2, "y" : 2 }
{ "_id" : 3, "name" : "value1", "z" : 10 }
{ "_id" : 4, "name" : "value1", "z" : 20 }
{ "_id" : 5, "name" : "value2", "x" : 8, "y" : 3 }
{ "_id" : 6, "name" : "value2", "x" : 8, "y" : 3 }
{ "_id" : 7, "name" : "value2", "z" : 15 }

这里,如果我根据name查询,取value1,那么我应该得到如下单个文档。

{ "name" : "value1", "x" : [ 1, 2 ], "y" : [ 2, 2 ], "z" : [ 10, 20 ] }

我认为这与聚合有关。但我不知道该怎么做。有没有办法实现这种行为?

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    你可以使用下面的聚合

    db.collection.aggregate([
      {
        $match: {
          name: "value1"
        }
      },
      {
        $group: {
          _id: "$name",
          x: {
            "$push": "$x"
          },
          y: {
            "$push": "$y"
          },
          z: {
            "$push": "$z"
          }
        }
      }
    ])
    

    MongoPlayground

    【讨论】:

    • 是否可以在生成的文档中添加name 字段?
    • 是的。但是,如果我使用多个常见字段(如 name)匹配文档,并且我想将它们包含在结果文档中怎么办?
    • 我明白了。如果我们使用$first,我们仍然可以拥有我们想要的字段。
    • @L.ShaneJohnPaulNewton 是的stackoverflow.com/questions/54440636/…
    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 2019-04-13
    • 2017-12-27
    • 2022-01-14
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多