如何在mongodb类别中返回布尔值

时间:2016-12-01 19:18:01

标签: 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'}

我想要一个查询,让所有与我成为朋友的人,以及我是否与他们成为朋友的布尔值。我希望找到一些类似的声明:

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,}}

1 个答案:

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