0

私は次のような文書を持っています

{
    foo : [1, 2]
}
{
    foo : [2, 3]
}

次のような配列が与えられた場合

[2, 3, 4]

2 番目のドキュメントだけを選択するにはどうすればよいですか? つまり、foo のすべての値が特定の配列の値と一致するドキュメントのみを選択します。

4

1 に答える 1

0

基本的に、配列を一致させる方法はいくつかあります。あなたのニーズに正確な解決策はありません。

次のようなドキュメントがあるとします。

{ "_id" : ObjectId("51b05a712961f4704684d901"), "x" : [ 6, 7, 8, 9 ] }
{ "_id" : ObjectId("51b05a712961f4704684d902"), "x" : [ 7, 8, 9, 10 ] }
{ "_id" : ObjectId("51b05a712961f4704684d903"), "x" : [ 8, 9, 10, 11 ] }

次のように query1 を使用できます。

db.collection.find({x:[3,4,5,6]})

結果は x のような配列に対してのみ完全一致です

結果1:

{ "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5, 6 ] }

query1 は一致しません:

{ "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5] }
{ "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5, 6, 7] }

次のように :query2 を使用できます。

db.t.find({x:{$all:[3,4]}})

result2 は次のようになります。

{ "_id" : ObjectId("51b05a722961f4704684daf1"), "x" : [ 3, 4, 5, 6 ] }
{ "_id" : ObjectId("51b05c332961f4704684dce4"), "x" : [ 3, 4, 5 ] }
{ "_id" : ObjectId("51b05c772961f4704684dce5"), "x" : [ 3, 4, 5, 6, 7 ] }

次のように : query3 を使用できます。

 db.t.find({x:{$in:[3,4]}})

Result3 は次のようになります。

{ "_id" : ObjectId("51b05a722961f4704684daf1"), "x" : [ 3, 4, 5, 6 ] }
{ "_id" : ObjectId("51b05a722961f4704684daf2"), "x" : [ 4, 5, 6, 7 ] }

この質問も参照してください:mongodb配列のマッチング

したがって、$subset オペレーターの未解決/未解決のチケットがあり、これはあなたがする可能性が高いことです。

于 2013-06-06T10:01:14.673 に答える