本文介绍了如何在 mongodb 中使用 $lookup 加入多个集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想使用聚合 $lookup
在 MongoDB 中加入两个以上的集合.可以加入吗?给我一些例子.
I want to join more than two collections in MongoDB using the aggregate $lookup
. Is it possible to join? Give me some examples.
这里我有三个集合:
用户
:
{
"_id" : ObjectId("5684f3c454b1fd6926c324fd"),
"email" : "[email protected]",
"userId" : "AD",
"userName" : "admin"
}
用户信息
:
{
"_id" : ObjectId("56d82612b63f1c31cf906003"),
"userId" : "AD",
"phone" : "0000000000"
}
用户角色
:
{
"_id" : ObjectId("56d82612b63f1c31cf906003"),
"userId" : "AD",
"role" : "admin"
}
推荐答案
Mongodb 3.2 及更高版本支持的 join 功能.您可以通过使用聚合查询来使用连接.
您可以使用以下示例进行操作:
The join feature supported by Mongodb 3.2 and later versions. You can use joins by using aggregate query.
You can do it using below example :
db.users.aggregate([
// Join with user_info table
{
$lookup:{
from: "userinfo", // other table name
localField: "userId", // name of users table field
foreignField: "userId", // name of userinfo table field
as: "user_info" // alias for userinfo table
}
},
{ $unwind:"$user_info" }, // $unwind used for getting data in object or for one record only
// Join with user_role table
{
$lookup:{
from: "userrole",
localField: "userId",
foreignField: "userId",
as: "user_role"
}
},
{ $unwind:"$user_role" },
// define some conditions here
{
$match:{
$and:[{"userName" : "admin"}]
}
},
// define which fields are you want to fetch
{
$project:{
_id : 1,
email : 1,
userName : 1,
userPhone : "$user_info.phone",
role : "$user_role.role",
}
}
]);
结果如下:
{
"_id" : ObjectId("5684f3c454b1fd6926c324fd"),
"email" : "[email protected]",
"userName" : "admin",
"userPhone" : "0000000000",
"role" : "admin"
}
希望这对您或其他人有所帮助.
Hope this will help you or someone else.
谢谢
这篇关于如何在 mongodb 中使用 $lookup 加入多个集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!