根据根文档属性进行过滤

时间:2016-04-25 20:10:25

标签: mongodb

这是文件结构:

{ 
    '_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,感觉就像一个简单的查询,但我找不到这样做的方法,或者甚至正确地谷歌,试过这个(可能知道它不会起作用); < / p>

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

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

1 个答案:

答案 0 :(得分:1)

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

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
            }
        }
    ])