我有一个简单的mongodb集合(聚合管道的摘录),比如说
[
{_id : [3, 3] , val : 7},
{_id : [3, 2] , val : 9},
{_id : [1, 3] , val: 10}
]
我想要$match
来获取[3, 3]
记录。
但是使用
$match : {$_id: { $all: [3, 3]}}
也会返回[3, 2]
,这是我们不想要的。任何人?
答案 0 :(得分:2)
我只能看到这种情况可能发生在这样的情况下:
{ "like": 1, "id": 3, "val": 7 },
{ "like": 1, "id": 3, "val": 7 },
{ "like": 2, "id": 3, "val": 5 },
{ "like": 2, "id": 2, "val": 5 },
然后汇总:
db.collection.aggregate([
{ "$group": {
"_id": "$like",
"id": { "$push": "$id" },
"val": { "$max": "$val" }
}},
{ "$project": {
"_id": "$id",
"val": 1
}}
])
给出了:
{ "_id" : [ 3, 2 ], "val" : 5 }
{ "_id" : [ 3, 3 ], "val" : 7 }
对于我们来说,$all
条件基本上被视为“集合”,就像$in
一样。这意味着[3,3]
基本上缩减为3
。因此,如果您想要“明确”匹配,请执行此操作:
db.collection.aggregate([
{ "$group": {
"_id": "$like",
"id": { "$push": "$id" },
"val": { "$max": "$val" }
}},
{ "$project": {
"_id": "$id",
"val": 1
}},
{ "$match": {
"_id": [3,3]
}}
])