如何将字段的值聚合到数组中?
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/…以上是关于如何将字段的值聚合到数组中?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Elasticsearch 中聚合数组字段的一个索引