Mongo db mit Ergebnis der Abfrage in eine weitere Abfrage mit $in
Habe ich Folgendes Modell in mongo db:
User-Auflistung
{
_id:12345,
name:15,
age:"Joe",
}
Adressen-Sammlung
{
_id:7663,
userId:12345,
Street:"xyz",
number:"1235",
city:"New York",
state:"NY"
}
Nun möchte ich, um alle Adressen, die der Benutzer über dem Alter von 20 Jahren. Was ich dachte, war die Abfrage alle ids der Benutzer, die über 20 und mit dem Ergebnis dieser Abfrage verwenden Sie den $operator, um die Adressen finden.
Meine Frage ist, gibt es eine Möglichkeit, diesen in einer Abfrage? Gibt es einen besseren Weg, um diese Abfrage?
(obs: dies ist nur ein Beispiel, mit meinem problem, das ich nicht einbetten-Adressen in Benutzer)
- Nein, MongoDB unterstützt keine joins. stackoverflow.com/questions/4067197/mongodb-and-joins
- Ja, ich verstehe mongo db doesnt support verbindet. Was ich versuche zu verstehen, was ist der beste Weg, um mein problem zu lösen, wie oben aufgeführt. Zum Beispiel, gibt es eine Möglichkeit, ich kann, greifen alle die ids der Benutzer und legen Sie es in eine andere Abfrage?
- "Der beste Weg" - Fragen sind in der Regel nicht eine gute Passform für, aber wenn Sie Ihre Frage aktualisieren Sie Ihren code mithilfe von
$in
dies zu tun, und Sie haben eine spezifische Frage zu einem problem mit der Herangehensweise, die besser funktioniert. - Die Frage ist wirklich, besser zu verstehen, mongo DB eigentlich. I dont haben ein real-life problem. Aber hier geht: ich weiß, ich kann mit der Liste der IDs von Benutzern, wie diese:
db.users.find({age:{$gt:20}})
Und ich weiß, ich kann die Abfrage der Liste der Adressen wie diese:db.addresses.find({userId:{$in:[123,124,125,126]}})
ich weiß, ich kann Projekt der ersten Abfrage nur die Ids, das einzige was ich weiß ist, wenn ich das Ergebnis der ersten Abfrage in der zweiten. Wenn dies nicht möglich ist, gibt es eine andere Möglichkeit, die ich Abfragen kann, die zweite Sammlung mit einem Ergebnis von der ersten? - Sicher, diese Frage angezeigt: stackoverflow.com/q/22318719/1259510
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Mongo-shell können Sie das Ergebnis einer Abfrage in eine andere. Zum Beispiel:
Hier collection coll1 enthält eine _id Feld. Dann können Sie überprüfen, ob alle Bezeichner, die nicht in der Sammlung coll2 die Liste der coll1_id Feld. Dies ist also ein Weg, um aufzuräumen zwei Tabellen, wenn Sie über Datensätze in coll1, die keinen Bezug über die coll1_id Feld in coll2.
Weiteren Ansatz die gleiche Sache zu tun:
Ersten Beispiel geht es in einem Befehl, die zweite hat es in zwei, aber das Konzept ist das gleiche. Mithilfe der Ergebnisse aus einer Abfrage in eine andere. Viele verschiedene Möglichkeiten, dies zu tun. Auch, die .toArray () - Methode kann nützlich sein, zum erstellen von arrays wenn Sie mehr tun, als nur unter Verwendung von distinct().
Verwenden Sie die aggregation framework, wo die
$lookup
pipeline-Stufe liefert die Funktionalität für das verknüpfen der beiden Sammlungen:Den oben erstellen Sie ein neues array-Feld genannt
address
(wie angegeben in der$lookup
als option) und enthält die passenden Dokumente aus der Sammlung Adressen. Wenn der angegebene name bereits vorhanden ist, in das Eingabe-Dokument, das vorhandene Feld wird überschrieben.können Sie dies nur tun, auf der Anwendungs-Ebene-bedeutet, erhalten alle Benutzer in einer Abfrage erhalten Sie alle Adressen, die in einem anderen, und kleben Sie es selbst zusammen. Mongo nicht tun, was Sie Fragen.