如何将字段的值聚合到数组中?

Posted

技术标签:

【中文标题】如何将字段的值聚合到数组中?【英文标题】: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 ] 

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

【问题讨论】:

【参考方案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 是的***.com/questions/54440636/…

以上是关于如何将字段的值聚合到数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在数组的 mongodb 的子字段中进行聚合和分组?

如何在 Elasticsearch 中聚合数组字段的一个索引

如何与数组中匹配的值聚合然后排序

如何仅在猫鼬中使用聚合填充嵌套在对象数组中的字段?

在 Spark 结构化流中,我如何将完整的聚合输出到外部源,如 REST 服务

如何在隐藏输入字段中保存数组的值,然后再将其替换为新数组