按照documentation,$查找只能加入一個外部集合。
您可以做的是將userInfo
和userRole
合併到一個集合中,因爲所提供的示例基於關係數據庫架構。 Mongo是NoSQL數據庫 - 這需要不同的文件管理方法。
請在下面找到兩步查詢,它將userInfo和userRole結合起來 - 創建用於上次查詢的新臨時集合以顯示組合數據。 在上次查詢中,有一個選項可以使用$ out並使用合併數據創建新集合以備將來使用。
創建集合
db.sivaUser.insert(
{
"_id" : ObjectId("5684f3c454b1fd6926c324fd"),
"email" : "[email protected]",
"userId" : "AD",
"userName" : "admin"
})
//"userinfo"
db.sivaUserInfo.insert(
{
"_id" : ObjectId("56d82612b63f1c31cf906003"),
"userId" : "AD",
"phone" : "0000000000"
})
//"userrole"
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"
}
}
])
的[多加入使用$查找操作條件]可能的複製(https://stackoverflow.com/questions/37086387/multiple-join-conditions-using-the-lookup-operator) – styvane
可能[如何查詢MongoDB中的引用對象?](https:// stackoverflow。com/questions/9621928/how-do-i-query-referenced-objects-in-mongodb) – sidgate