2017-09-19 4 views
0

ID配列(array = [10, 20, 30]など)があり、これらのネストされたドキュメントのみを返すようにコレクションを照会する必要がありました。特定の配列に一致するネストされたドキュメントを照会します

{ 
    "_id": "abc", 
    "items": [ 
     { 
      "id": "5" 
     }, 
     { 
      "id": "10" 
     }, 
     { 
      "id": "20" 
     } 
    ] 
} 

私はCollection.findOne({id:"abc", "items.id": {$in: array}});ようなクエリを試してみましたが、これは代わりにのみ10 and 20で、すべての文書を返します。

答えて

0

以下のMongo 3.4バージョンの集約クエリを試してみてください。

クエリ$matchステージは、入力値にitemsアレイをオーバーライド&フィルタリングする$addFields + $filter続いて指定された述部に一致するすべてのドキュメントを維持します。

db.collection_name.aggregate([ 
    { 
    "$match": { 
     "id": "abc", 
     "items.id": { 
     "$in": array 
     } 
    } 
    }, 
    { 
    "$addFields": { 
     "items": { 
     "$filter": { 
      "input": "$items", 
      "as": "item", 
      "cond": { 
      "$in": [ 
       "$$item.id", 
       array 
      ] 
      } 
     } 
     } 
    } 
    } 
]) 
関連する問題