这是文件结构:
{
'_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' } } } }
])
它没有用,所以问题是;如何查找嵌套文档与根元素具有相同值的文档(对于某个字段)?
答案 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
}
}
])