单个集合的聚合查询

Aggregate query for a single collection

我的数据库包含一个用户 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"
    )

请帮忙解决这个问题。我是这项技术的新手。

问题: 我们想要获取 BFS 垂直领域的经理也在其他垂直领域扮演经理角色的数据.

我会使用 聚合框架 来处理这个问题 MongoDB。

下面是对每个管道的解释。

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

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"
    ]
}