对单个集合的聚合查询

时间:2016-08-11 09:48:40

标签: node.js mongodb aggregation-framework mongodb-aggregation

我的数据库包含以下格式的用户collection

{
    "userId": "12345",
    "vertical": "BFS",
    "Role": "Manager"
},
{
    "userId": "12345",
    "vertical": "Insurance",
    "Role": "Manager"
},
{
    "userId": "12367",
    "vertical": "BFS",
    "Role": "Associate"
}

我知道verticalmanager,我必须找到userId。然后我必须找到特定用户的verticals

与SQL一样:

select vertical 
from user 
where role="Manager" 
    and userid in (
        select userid from user 
        where vertical="BFS" and role="Manager"
    )

请帮忙。我是这项技术的新手。

1 个答案:

答案 0 :(得分:0)

问题:我们希望获得 BFS 纵向的经理在其他行业中扮演经理角色的数据。

我会使用MongoDB中提供的聚合框架处理此问题。

以下是对下面查询中每个管道的解释。

1)$ Match - 获取角色为Manager的所有数据,因为我们只对经理角色感兴趣

2)$ project - 只是将字段投影到下一个管道的临时管道

3)$ group - 与SQL类似,用于按userId对数据进行分组,并将其垂直方向添加到数组

4)$ Match - 过滤属于BFS的用户ID

db.vertical.aggregate([
   {$match : { "Role": "Manager"}},
   {$project : { "userId" : 1, "vertical" : 1, "Role" : 1}},
   {$group : { _id : "$userId", "verticalsArray" : {$push : "$vertical"} } },
   {$match : { "verticalsArray": "BFS"}},
]);

<强>输出: -

{
    "_id" : "12345",
    "verticalsArray" : [ 
        "BFS", 
        "Insurance"
    ]
}