Згідно з документацією , $ lookup може приєднатись лише до однієї зовнішньої колекції.
Що ви можете зробити , це об'єднати userInfo
і userRole
в одній колекції, як це передбачено приклад заснований на реляційної БД схеми. Mongo - це база даних noSQL - і це вимагає іншого підходу до управління документами.
Знайдіть нижче 2-кроковий запит, який поєднує userInfo та userRole - створюючи нову тимчасову колекцію, яка використовується в останньому запиті для відображення об’єднаних даних. В останньому запиті є можливість використовувати $ out і створити нову колекцію з об’єднаними даними для подальшого використання.
створювати колекції
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"
})
"приєднуйтесь" до них усіх :-)
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"
}
}
])