如果我有一个像Friends
这样的集合:
{'_id': ObjectId('abcdef1'), 'user': 'Jim', 'user2': 'Jon'}
{'_id': ObjectId('abcdef2'), 'user': 'Jim', 'user2': 'Fred'}
{'_id': ObjectId('abcdef3'), 'user': 'Jon', 'user2': 'Jim'}
我想要一个查询,让所有与我成为朋友的人,以及我是否与他们成为朋友的布尔值。我希望找到一些类似的声明:
Find all people I'm friends with and add a field that says whether they're friends with me
我的预期输出将是用户吉姆:
{'friends': {'user': 'Jon', 'friends_with_me': true,
{'user': 'Fred', 'friends_with_me': false,}}
答案 0 :(得分:5)
使用最新的Mongo 3.4版本,您可以使用 $graphLookup 来识别关系。
db.Friends.aggregate([{
$match: {
user: 'Jim'
}
}, {
$graphLookup: {
from: 'Friends',
startWith: '$user2',
connectFromField: 'user2',
connectToField: 'user',
maxDepth: 0,
as: 'relationship'
}
}, {
$project: {
_id: 0,
user: '$user2',
friends_with_me: {
$cond: [{
$eq: [{
$size: "$relationship"
}, 0]
}, false, true]
}
}
}])