MongoDB-Abfrage IN array-Objekt
Problem habe ich zum abrufen von Informationen zwischen zwei Kollektionen.
Die erste Kollektion stores Mitarbeiter Informationen:
{
"_id" : ObjectId("4f9643967f8b9a3f0a00005a"),
"birth_date" : "1963-09-09",
"departments" : [
{
"departments_id" : ObjectId("4f9643957f8b9a3f0a000007"),
"from_date" : "1990-01-03",
"to_date" : "1990-01-15"
}
],
"first_name" : "Parviz",
"gender" : "M",
"hire_date" : "1990-01-03",
"last_name" : "Lortz",
}
der zweite die Abteilungen Informationen
{
"_id" : ObjectId("4f9643957f8b9a3f0a000004"),
"dept_name" : "Marketing",
"managers" : [
{
"employees_id" : ObjectId("4f96439b7f8b9a3f0a0186a9"),
"from_date" : "1985-01-01",
"to_date" : "1991-10-01"
},
{
"employees_id" : ObjectId("4f96439b7f8b9a3f0a0186aa"),
"from_date" : "1991-10-01",
"to_date" : "9999-01-01"
}
]
}
Ich versuche zu finden: Alle Abteilungen für einen bestimmten Mitarbeiter.
Habe ich versucht, etwas wie:
employees = db.employees.find({_id:ObjectId("some_id")});
db.departments.find({_id:{$in:...}});
Aber ich weiß nicht, wie ich das erklären kann, $in department_id aller Abteilungen von var Mitarbeiter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese nicht getan werden kann mit einer einfachen Abfrage. Sie haben, um eine Schleife über Mitarbeiter.Abteilungen und für jede iteration den departments_id in ein array. Das array, das Sie dann verwenden können, in die zweite Zeile. Das ist etwas am besten getan, in der Sprache Ihrer Wahl.
In Ordnung, um dies zu erleichtern, müssen Sie ändern Ihr schema. Eine option ist
speichern Sie die Abteilung Informationen in der employee-Datensatz, aber in deinem Fall würden Sie duplizieren, eine Menge von Daten.
Ich würde stattdessen vorschlagen jede Abteilung enthält eine Liste der Mitarbeiter-IDs und-Termine statt so:
In diesem Fall können Sie dann einfach laufen:
Gibt es einen einfachen Weg, das zu tun, Mongo 3.2, zumindest in nur einem Arbeitsgang:
Den
$elemMatch
modifier (siehe ref) hilft Abfrage in ein array-wie der Wert einer Objekt-Eigenschaft.