Mongodb, Aggregatabfrage mit $ lookup

7

Habe zwei Collectionen, Tags und Personen.

Tags-Modell:

%Vor%

Personenmodell:

%Vor%

Ich möchte eine Abfrage, die alle Tags zurückgibt, die im Personenmodell verwendet werden. Alle Dokumente.

Etwas wie

%Vor%

Oder sollte ich irgendwie den aggregierten Ansatz dazu verwenden?

    
Per 07.10.2016, 07:42
quelle

2 Antworten

20

Für ein bestimmtes Personendokument können Sie die Funktion populate() wie %Vor%

Wenn Sie beispielsweise nach Personen suchen möchten, die ein Tag mit 'MongoDB' oder 'Node JS' haben, können Sie die Abfrageoption in die Funktionsüberladung populate() wie folgt einfügen:

%Vor%

Wenn Sie möchten, dass alle Tags in "project.tags" für alle Personen vorhanden sind, dann ist Aggregation Framework der richtige Weg. Erwägen Sie, diese Pipeline für die Personenkollektion auszuführen, und verwenden Sie die $lookup -Operator, um einen linken Join in der Tag-Sammlung zu machen:

%Vor%

Für eine bestimmte Person wenden Sie dann eine $match Pipeline als ersten Schritt zum Filtern der Dokumente:

%Vor%

Eine weitere Problemumgehung, wenn Sie MongoDB-Versionen & gt; = 2.6 oder & lt; = 3.0 verwenden, die keine Unterstützung für $lookup füllt die Ergebnisse der Aggregation als:

%Vor%     
chridam 07.10.2016, 08:08
quelle
1

Wenn Sie MongoDb Version 3.2 verwenden, können Sie $ lookup verwenden, um ein linker äußerer Join.

    
Clement Amarnath 07.10.2016 07:58
quelle