我有两个系列:用户和角色。
两者都使用ObjectIds作为索引。
用户有一个名为 Roles 的字段,其中包含一个Role ObjectIds数组。
Users:
{
"_id" : ObjectId("590253b50985e614aaa90098"),
"roles" : [
ObjectId("57d624612808daf641fafae3"),
ObjectId("5a2da7e37f1c84d172161273"),
ObjectId("5a2ede157f1c84d172161d33"),
ObjectId("5a2ede927f1c84d172161d34")
}
Roles:
{
"_id" : ObjectId("57c6371cf541a6c9457f1319"),
"name" : "Admin"
}
我试图在用户集合的角色数组中识别角色objectIds,但在角色集合中没有引用。
有什么想法吗?我已经尝试过Aggregates,lookups,foreach,nin ..并且没有找到合适的组合。显然我是mongo的新手:p
提前感谢您的帮助!
答案 0 :(得分:1)
您必须使用$ unwind,$ lookup,$ match和$ group:
db.Users.aggregate([
{
$unwind: "$roles"
},
{
$lookup:
{
from: "Roles",
localField: "roles",
foreignField: "_id",
as: "Role_info"
}
},
{
$match : {
"Role_info.0": {$exists:false}
}
},
{
$group: {
_id: "$roles"
}
}]);