2017-02-02 4 views
2

Ich habe zwei Sammlungen, eine Modell- und eine Papierkollektion. Ich muss Felder von beiden abgleichen können. Sie haben ein Feld namens Referenz, das eine Kennung enthält.pymongo - Wie man auf Nachschlagen abgleicht?

Ich möchte Dokumente übereinstimmen, die die haben folgende

‚Autoren‘: ‚Migliore M‘ aus der Papiere Sammlung ‚Zelltypen‘: ‚Hippocampus CA3 Pyramidenzelle‘ aus der Modelle Sammlung

Hier wie mein Code aussieht:

pipeline = [{'$lookup': 
       {'from' : 'models', 
       'localField' : 'references', 
       'foreignField' : 'references', 
       'as' : 'cellmodels'}}, 
      {'$match': 
       {'authors' : 'Migliore M', 'cellmodels.celltypes' : 'Hippocampus CA3 pyramidal cell'}}, 


      ] 

for doc in (papers.aggregate(pipeline)): 
    pprint (doc) 

ich bekomme keine Ergebnisse.

Ich bemerke, dass, wenn ich nicht die cellmodels.celltypes im Match-Parameter aufrufen, es die Papiere finden wird, die Migliore M entsprechen. Wie kann ich es auch mit dem Zelltyp übereinstimmen: 'Hippocampus CA3 Pyramidenzelle' von der Modelle Sammlung in dieser Abfrage?

+0

Sie müssen nur '{ '$ Abroller': '$ cellmodels'}' 'vor $ match'. – Veeram

+0

Nicht genau sicher, dass die Abwickelung irgendetwas getan hat, aber ich konnte es zur Arbeit – Kevin

+0

Die Suche zurückgibt Array so Abwickeln wird Arrays in Objekte konvertieren und Sie können den Vergleich auf eingebettete Felder anwenden. – Veeram

Antwort

0

Das funktionierte:

pipeline = [{'$lookup': 
       {'from' : 'models', 
       'localField' : '_id', 
       'foreignField' : 'references', 
       'as' : 'cellmodels'}}, 
      {'$unwind': '$cellmodels'}, 
      {'$match': 
       {'authors' : 'Migliore M', 'cellmodels.celltypes' : 'Hippocampus CA3 pyramidal cell'}}, 
      {'$project': 
       {'authors':1, 'cellmodels.celltypes':1}} 
      ] 

for doc in (papers.aggregate(pipeline)): 
    pprint (doc) 
Verwandte Themen