$setUnion 从多个文档 MongoDB 中合并数组
问题:$setUnion 从多个文档 MongoDB 中合并数组 我在一个集合中有如下文件: { _id : 1 , data : [7,4,0] } { _id : 2 , data : [4,5,6] } { _id : 3 , data : [6,7,8] } 我想从两个或多个文档中合并data数组。 我用来查找id1 和 2 的data数组的并集的查询是: db.coll.aggregat
·
问题:$setUnion 从多个文档 MongoDB 中合并数组
我在一个集合中有如下文件:
{ _id : 1 , data : [7,4,0] }
{ _id : 2 , data : [4,5,6] }
{ _id : 3 , data : [6,7,8] }
我想从两个或多个文档中合并data
数组。
我用来查找id
1 和 2 的data
数组的并集的查询是:
db.coll.aggregate(
{
$match : {
_id: { $in: [1, 2] }
}
},
{
$group: {
_id: 0,
s0: { $first: "$data"},
s1: { $first: "$data"}
}
},
{
$project: {
_id: 0,
ans: { $setUnion: [ "$s0","$s1"]}
}
}
).pretty()
但是查询结果是:
{7, 5, 0}
这似乎只是id
1 的数据。
如何实现同一数组字段上的两个或多个文档的并集?
PS:我使用的是 MongoDB 3.4
解答
要获得更高效的查询,请使用 $reduce
运算符来展平数组。这将允许您连接任意数量的数组,因此不仅仅是将文档 1 和 2 中的两个数组合并,这也适用于其他数组。
考虑运行以下聚合操作:
db.coll.aggregate([
{ "$match": { "_id": { "$in": [1, 2] } } },
{
"$group": {
"_id": 0,
"data": { "$push": "$data" }
}
},
{
"$project": {
"data": {
"$reduce": {
"input": "$data",
"initialValue": [],
"in": { "$setUnion": ["$$value", "$$this"] }
}
}
}
}
])
样本输出
{
"_id" : 0,
"data" : [ 0, 4, 5, 6, 7 ]
}
更多推荐
已为社区贡献32870条内容
所有评论(0)