2017-09-19 2 views
0

Ich habe ein Array von IDs, wie array = [10, 20, 30], und ich wollte meine Sammlung abfragen, nur diese verschachtelten Dokumente zurückgeben.Abfrage geschachtelte Dokumente, die einem bestimmten Array entsprechen

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

habe ich versucht, eine Abfrage wie Collection.findOne({id:"abc", "items.id": {$in: array}}); aber dies würde alle Dokumente, statt nur 10 and 20.

Antwort

0

Versuchen Sie unter Aggregat Abfrage in Mongo 3.4 Version.

Die Abfrage $match Bühne alle Dokumente halten, die das angegebene Prädikat von $addFields + $filter gefolgt entsprechen filtern & Überschreibung der items Array auf den Eingangswerten.

db.collection_name.aggregate([ 
    { 
    "$match": { 
     "id": "abc", 
     "items.id": { 
     "$in": array 
     } 
    } 
    }, 
    { 
    "$addFields": { 
     "items": { 
     "$filter": { 
      "input": "$items", 
      "as": "item", 
      "cond": { 
      "$in": [ 
       "$$item.id", 
       array 
      ] 
      } 
     } 
     } 
    } 
    } 
]) 
Verwandte Themen