首页 > 解决方案 > 如何将字段的值聚合到数组中?

问题描述

让我们取一个名为的集合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, take 进行查询value1,那么我应该得到以下单个文档。

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

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

标签: mongodbmongoosemongodb-queryaggregation-framework

解决方案


您可以使用以下聚合

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

Mongo游乐场


推荐阅读