这是文档结构:
{
'_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
}
}
])