2017-01-14 12 views
0

一致する配列要素の数を見つける必要があり、入れ子になった配列に値が含まれていない場合はcount = 0となります。 ここに私のデータエンティティ構造があります。配列内のすべての一致する要素の数を調べる

{ 
    name:A, 
    issues:[1,2,3,4] 
} 
{ 
    name:B, 
    issues:[1,2] 
} 
{ 
    name:C, 
    issues:[3,4] 
} 

issues:[1,2]のためのユーザーの検索が、私は

[{ 
    name:A, 
    count:2 
} 
{ 
    name:B, 
    count:2 
} 
{ 
    name:C, 
    count:0 
}] 

ように見える私の結果がセットしたい場合、私はこれを達成するために、クエリの下に使用していますが、それは私だけが

[{ 
    name:A, 
    count:2 
} 
{ 
    name:B, 
    count:2 
}] 

結果を返します間違いなく私がしている$ matchのために知っている

{'$unwind':'$issues'} 
,{'$match':{'allissues': {$in: p.issues? p.issues.map(Number):[]}}} 
,{ '$group' :{_id:'$_id', name :{ $first: '$name' },count: { $sum: 1 }} }' 
+1

これを試すことができます。 db.collection.aggregate([{$ project:{count:{$ size:{$ setIntersection:[p.issues、 "$ issues"]}}}}) ' – Veeram

答えて

1

変数がユーザによって入力された配列である場合、上記のような3段階の集計を使用して結果を得る必要はありません。あなたは、各ドキュメントのユーザー入力とissuesフィールドの交差点を見つけて、結果配列の長さを取得する必要があります。このコードは仕事をします:

db.col.aggregate([{ 
    $project: { 
    count: { 
     $size: { 
     $setIntersection: [issues, "$issues"] 
     } 
    } 
    } 
}]) 
関連する問題