mongo查找数组字段不匹配的位置

时间:2018-04-19 22:51:42

标签: arrays mongodb lookup

我有两个系列:用户角色

两者都使用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

提前感谢您的帮助!

1 个答案:

答案 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"
    }
}]);