Nicht wirklich sicher, ob Ihre Datenstruktur, wenn Sie ein Beispiel nennen könnte es wäre einfacher, mit zu arbeiten, aber das folgende Beispiel nehmen, wo wir eine students
und eine teachers
Sammlung:
> db.students.find()
{ "_id" : ObjectId("584020b6410ebb5a4ea03393"), "name" : "bob" }
{ "_id" : ObjectId("584020b6410ebb5a4ea03394"), "name" : "foo" }
{ "_id" : ObjectId("584020b7410ebb5a4ea03395"), "name" : "bill" }
> db.teachers.find().pretty()
{
"_id" : ObjectId("584020e7410ebb5a4ea03396"),
"name" : "t 1",
"studentIds" : [
ObjectId("584020b6410ebb5a4ea03393"),
ObjectId("584020b7410ebb5a4ea03395")
]
}
{
"_id" : ObjectId("584020ff410ebb5a4ea03397"),
"name" : "t 1",
"studentIds" : [
ObjectId("584020b6410ebb5a4ea03394"),
ObjectId("584020b7410ebb5a4ea03395")
]
}
Dann können wir die Aggregation Rahmen mit $unwind
und $lookup
Stufen verwenden:
db.teachers.aggregate([
{$unwind: "$studentIds"},
{$lookup: {
from: "students",
localField: "studentIds",
foreignField: "_id",
as: "students"
}
}
])
und wir werden die folgende Ausgabe:
{
"_id" : ObjectId("584020e7410ebb5a4ea03396"),
"name" : "t 1",
"studentIds" : ObjectId("584020b6410ebb5a4ea03393"),
"students" : [
{
"_id" : ObjectId("584020b6410ebb5a4ea03393"),
"name" : "bob"
}
]
}
{
"_id" : ObjectId("584020e7410ebb5a4ea03396"),
"name" : "t 1",
"studentIds" : ObjectId("584020b7410ebb5a4ea03395"),
"students" : [
{
"_id" : ObjectId("584020b7410ebb5a4ea03395"),
"name" : "bill"
}
]
}
{
"_id" : ObjectId("584020ff410ebb5a4ea03397"),
"name" : "t 1",
"studentIds" : ObjectId("584020b6410ebb5a4ea03394"),
"students" : [
{
"_id" : ObjectId("584020b6410ebb5a4ea03394"),
"name" : "foo"
}
]
}
{
"_id" : ObjectId("584020ff410ebb5a4ea03397"),
"name" : "t 1",
"studentIds" : ObjectId("584020b7410ebb5a4ea03395"),
"students" : [
{
"_id" : ObjectId("584020b7410ebb5a4ea03395"),
"name" : "bill"
}
]
}
Refs: https://docs.mongodb.com/v3.2/reference/operator/aggregation/ https://docs.mongodb.com/v3.2/reference/operator/aggregation/lookup/
'Collection.find()' gibt einen * Cursor *. Sie können beispielsweise ein * Array * von Cursorn aus einer Publikation zurückgeben. Aber ist das für einen Helfer? –