1

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

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

4

1 回答 1

0

问题:我们希望获得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"
    ]
}
于 2016-08-11T11:34:21.640 回答