7

配列内に少なくとも 1 つの値を含むドキュメントを取得する必要があります。私の文書の構造は次のとおりです。

{ "_id": 3, 
"username": "111111", 
"name": "XPTO 1", 
"codes": [ 2, 4, 5 ], 
"available": true }


{ "_id": 4, 
"username": "22222", 
"name": "XPTO 2", 
"codes": [ 3, 5 ], 
"available": true }

「コード」で検索する必要があり、値「5」を検索する場合、配列内にこの値を含むすべてのドキュメントを取得する必要があります。

#elemMatch を使用しようとしましたが、成功しませんでした...

db.user.find({codes: {"$elemMatch": {codes: [2,8]}}}, {"codes":1})

これどうやってするの?

前もって感謝します。

4

1 に答える 1

13

あるフィールドの値を比較するのと同じように、配列内の値をチェックできます。したがって、$elemMatch を使用せずに、次のようにする必要があります。

  1. 配列に単一の値 5 が含まれているかどうかを確認する場合: -

    db.user.find({codes: 5}, {codes:1})
    

    codesこれにより、配列に が含まれるすべてのドキュメントが返されます5

  2. 配列に特定の値セットの値が含まれているかどうかを確認する場合: -

    db.user.find({codes: {$in: [2, 8]}}, {codes:1})
    

    これは、2 または 8 のいずれかを含む配列を持つドキュメントを返します

  3. 配列にリスト内のすべての値が含まれているかどうかを確認する場合: -

    db.user.find({codes: {$all: [2, 5]}}, {codes:1})
    

    これにより、2 と 5 の両方を含む配列を持つすべてのドキュメントが返されます。

于 2013-01-16T20:01:10.270 に答える