基于根文档属性进行筛选



这是文档结构:

{ 
    '_id' : ObjectId('56be1b51a0f4c8591f37f62a'),
    'name': 'Bob',
    'sub_users': [{'_id' : ObjectId('56be1b51a0f4c8591f37f62a')}]
}
{ 
    '_id' : ObjectId('56be1b51a0f4c8591f37f62b'),
    'name': 'Alice',
    'sub_users': [{'_id' : ObjectId('56be1b51a0f4c8591f37f62a')}]
}

sub_users数组基本上用于链接帐户,在示例中,Alice 是 Bob 的经理,因为她将他作为sub_user。Bob 在 sub_users 数组中有自己的 id,这是错误的(没有人真正是他自己的老板)。

我想找到所有的 Bobs,感觉就像一个简单的查询,但我找不到做到这一点的方法,甚至无法正确谷歌它,尝试了这个(可能知道它不起作用);

db.users.aggregate([                       
    { $group: { _id: '_id' } },
    { $match: { sub_users: { $elemMatch: { _id: '$$ROOT._id' } } } }
])

它没有奏效,所以问题是; 如何找到嵌套文档与根元素(对于某个字段)具有相同值的文档?

为了到达那里,我正在使用比较表达式 - 请参阅下面的示例:

db.users.aggregate([{
            $unwind : "$sub_users"
        }, //have all ids on same level
        {
            $project : {
                _id : 1,
                name : 1,
                sameId : {
                    $cmp : ["$_id", "$sub_users._id"]
                },
            }
        }, {
            $match : {
                sameId : 0
            }
        }
    ])

最新更新