Rob*_*Rob 2 mongodb aggregation-framework
如果我有一个Friends像这样的集合:
{'_id': ObjectId('abcdef1'), 'user': 'Jim', 'user2': 'Jon'}
{'_id': ObjectId('abcdef2'), 'user': 'Jim', 'user2': 'Fred'}
{'_id': ObjectId('abcdef3'), 'user': 'Jon', 'user2': 'Jim'}
Run Code Online (Sandbox Code Playgroud)
我想要一个查询,让所有与我成为朋友的人,以及我是否与他们成为朋友的布尔值.我希望有一些发现声明如下:
Find all people I'm friends with and add a field that says whether they're friends with me
Run Code Online (Sandbox Code Playgroud)
我的预期输出将是用户吉姆:
{'friends': {'user': 'Jon', 'friends_with_me': true,
{'user': 'Fred', 'friends_with_me': false,}}
Run Code Online (Sandbox Code Playgroud)
使用最新的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]
}
}
}])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |