Ich habe Probleme, ein Dokument nach Werten abzufragen, die im Dokument nach der Population mit Mungo übereinstimmen.
Meine Schemas sind ungefähr so:
%Vor%Ich hätte gerne alle Benutzer, die zB eine Email mit dem type="Gmail" haben.
Die folgende Abfrage gibt leere Ergebnisse zurück:
%Vor%Ich musste die Ergebnisse in JS wie folgt filtern:
%Vor%Gibt es eine Möglichkeit, so etwas direkt aus dem Mungo zu befragen?
@Jason Cust hat es bereits ziemlich gut erklärt - in dieser Situation ist es oft die beste Lösung, das Schema zu ändern, um die Abfrage von Users
nach Eigenschaften von Dokumenten in separaten Sammlungen zu verhindern.
Hier ist die beste Lösung, die ich mir vorstellen kann, die Sie jedoch nicht dazu zwingen wird (weil Sie in dem Kommentar gesagt haben, dass Sie das nicht können).
%Vor% Was wir hier tun, füllt nur Alles, was übrig bleibt, ist email
s passende zusätzliche Abfrage ( match
Option in .populate()
Aufruf) - andernfalls wird email
Feld in Users
Dokumente auf null
. .filter
auf dem zurückgegebenen users
-Array, wie in Ihrer ursprünglichen Frage - nur mit viel einfacherer, sehr generischer Prüfung. Wie Sie sehen können - entweder email
ist da oder nicht.
Die Funktion populate
von Mongoose wird nicht direkt in Mongo ausgeführt. Stattdessen, nachdem die erste find
-Abfrage ein Set von Dokumenten zurückgibt, erstellt populate
ein Array mit einzelnen find
-Abfragen für die referenzierte Sammlung, die ausgeführt werden soll, und fügt die Ergebnisse dann wieder in die Originaldokumente ein. Im Wesentlichen versucht Ihre find
-Abfrage, eine Eigenschaft des referenzierten Dokuments (die noch nicht abgerufen wurde und daher undefined
lautet) zu verwenden, um die ursprüngliche Ergebnismenge zu filtern.
In diesem Anwendungsfall scheint es sinnvoller, E-Mails als Filialdokument-Array und nicht als separate Sammlung zu speichern, um das zu erreichen, was Sie tun möchten. Als ein allgemeines Entwurfsmuster für Dokumentenspeicher ist dies einer der Anwendungsfälle, die sinnvoll sind, um ein Array als Filialdokument zu speichern: begrenzte Größe und sehr wenige Modifikationen.
Aktualisieren Sie Ihr Schema auf:
%Vor%Dann sollte die folgende Abfrage funktionieren:
%Vor%Tags und Links javascript node.js mongodb mongoose