Ich habe zwei Sammlungen und ich möchte Felder von beiden erhalten, also verwende ich $lookup
in einer Aggregationspipeline.
Dies funktioniert einwandfrei und gibt alle Dokumente mit einem zusätzlichen Feld, einem Array mit 0 oder 1 Elementen (ein Objekt) zurück. Wenn 0 Elemente, bedeutet dies, dass die JOIN
(in SQL-Welt) nichts zurückgegeben hat. Wenn 1 Element, bedeutet dies, dass es eine Übereinstimmung und das Element in einem Objekt mit den Feldern der zweiten Sammlung gab.
Jetzt, da ich diese Ergebnisse habe, möchte ich $match
verwenden, um einige der Ergebnisse zu filtern.
Um $match
zu verwenden, möchte ich zuerst $unwind
auf diesem neuen zusätzlichen Feld verwenden, um das Array zu extrahieren. Das Problem ist, sobald ich die $unwind
Bühne einfügen, ist das Ergebnis der Abfrage ein einziges Dokument.
Warum passiert das? Wie kann ich $unwind
und dann $match
alle Dokumente, die ich von der $lookup
Bühne bekommen habe?
Was ist, wenn ich die '$ lookup' durchführen möchte und auch nach einer Bedingung filtern möchte? So würde ich nur 1 (oder 0) Ergebnisse für das neu erstellte Feld bekommen. Oder mit anderen Worten, wenn ich am Ende mehrere Objekte im neuen Feld habe, gibt es eine Möglichkeit, dieses Feld zu filtern und nur das Objekt mit 'doc: 2' zu belassen? – alexandernst
können Sie '$ project' verwenden, um die Form des Dokuments zu manipulieren - wenn das Ihnen geholfen hat, markieren Sie bitte als Antwort :-) – profesor79
Keine Sorge, ich werde Ihre Antwort markieren. Kannst du ein bisschen weiter erklären, wie ich es mit '$ project' machen würde? – alexandernst