2017-10-26 1 views
0

Ich habe 2 Sammlungen wie:Wie zum Nachschlagen und Spiel in MongoDB

collectionA: { _id: "ID1", ... Requisiten. }

collectionB: { _id: "ID2", collectionA_id: "ID1", property_x: 3, ... Requisiten. }

Wann werde ich mit der Suche verbinden, wie kann ich auch nach collectionB.property_x filtern?

So Im versuchen, wie:

{ 
"$lookup": { 
"from" => "", 
'localField' => '_id', 
'foreignField' => 'job_id', 
'as' => 'collB' 
}, 
"$match": { 
"collB.property_x": 3 
} 
} 

Wie ist das möglich?

Vielen Dank!

Antwort

0

Es ist möglich. Stellen Sie sich vor, Sie haben zwei Sammlungen wie folgt aus:

db.collectionA.insert({_id: 1, field: "hey"}); 
db.collectionA.insert({_id: 2, field: "hey2"}); 
db.collectionA.insert({_id: 3, field: "hey3"}); 

db.collectionB.insert({_id:1, fk: 1, cnt: 4}); 
db.collectionB.insert({_id:2, fk: 2, cnt: 0}); 

Lassen Sie uns sagen, dass fk Feld eine Art von „Fremdschlüssel“ Beziehung darstellt. Wir möchten $ lookup verwenden, um Dokumente von collectionB in collectionA einzubetten. Die Suche ist sehr flexibel, sodass abhängige Dokumente als Array eingebunden werden, da es eine Beziehung zwischen eins und vielen geben kann. Was wir tun müssen, ist $ wickeln dieses verschachtelte Array, um nur ein eingebettetes Element aus SammlungB in jedem Dokument zu haben, und dann können wir $ entsprechen auf solche Einträge ausführen. Also meine gesamte Abfrage sieht so aus:

db.collectionA.aggregate([ 
{ 
    $lookup: 
    { 
     from: "collectionB", 
     localField: "_id", 
     foreignField: "fk", 
     as: "relation" 
    } 
    }, 
    { 
    $unwind: "$relation" 
    }, 
    { 
    $match: {"relation.cnt": 0} 
    } 
]); 
Verwandte Themen