2015-09-29 75 views
0

我有一个简单的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

是。完整的谎言,因为'_id'不能是一个数组。 –

+1

我想你错过了我的问题的一部分,说它的聚合管线提取物,我可以是一个数组,因此 –

+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] 
    }} 
]) 
+0

的确......你是一位超级明星..而我正在愚蠢.. –