Ana*_*via 3 mongodb mongodb-query aggregation-framework
我在一个集合中有文件如下:
{ _id : 1 , data : [7,4,0] }
{ _id : 2 , data : [4,5,6] }
{ _id : 3 , data : [6,7,8] }
Run Code Online (Sandbox Code Playgroud)
我想data从两个或更多文档中联合数组.
我用来查找1和2 data数组的id并集的查询是:
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()
Run Code Online (Sandbox Code Playgroud)
但查询结果如下:
{7, 5, 0}
Run Code Online (Sandbox Code Playgroud)
这似乎id只是1 的数据.
如何在同一个数组字段上实现两个或多个文档之间的并集?
PS:我正在使用MongoDB 3.4
chr*_*dam 17
要获得更有效的查询,请使用$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"] }
}
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
样本输出
{
"_id" : 0,
"data" : [ 0, 4, 5, 6, 7 ]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5608 次 |
| 最近记录: |