Gemäß der Dokumentation kann $ lookup nur einer externen Sammlung beitreten.
Was Sie tun können, ist zu kombinieren userInfo
und userRole
in einer Sammlung, wie angegeben, basiert das Beispiel auf einem relationalen DB-Schema. Mongo ist eine noSQL-Datenbank - und dies erfordert einen anderen Ansatz für die Dokumentenverwaltung.
Im Folgenden finden Sie eine zweistufige Abfrage, die userInfo mit userRole kombiniert und eine neue temporäre Sammlung erstellt, die in der letzten Abfrage zum Anzeigen kombinierter Daten verwendet wird. In der letzten Abfrage besteht die Möglichkeit, $ out zu verwenden und eine neue Sammlung mit zusammengeführten Daten für die spätere Verwendung zu erstellen.
Sammlungen erstellen
db.sivaUser.insert(
{
"_id" : ObjectId("5684f3c454b1fd6926c324fd"),
"email" : "admin@gmail.com",
"userId" : "AD",
"userName" : "admin"
})
db.sivaUserInfo.insert(
{
"_id" : ObjectId("56d82612b63f1c31cf906003"),
"userId" : "AD",
"phone" : "0000000000"
})
db.sivaUserRole.insert(
{
"_id" : ObjectId("56d82612b63f1c31cf906003"),
"userId" : "AD",
"role" : "admin"
})
"mach mit" allen :-)
db.sivaUserInfo.aggregate([
{$lookup:
{
from: "sivaUserRole",
localField: "userId",
foreignField: "userId",
as: "userRole"
}
},
{
$unwind:"$userRole"
},
{
$project:{
"_id":1,
"userId" : 1,
"phone" : 1,
"role" :"$userRole.role"
}
},
{
$out:"sivaUserTmp"
}
])
db.sivaUserTmp.aggregate([
{$lookup:
{
from: "sivaUser",
localField: "userId",
foreignField: "userId",
as: "user"
}
},
{
$unwind:"$user"
},
{
$project:{
"_id":1,
"userId" : 1,
"phone" : 1,
"role" :1,
"email" : "$user.email",
"userName" : "$user.userName"
}
}
])