我的数据库包含以下格式的用户collection
:
{
"userId": "12345",
"vertical": "BFS",
"Role": "Manager"
},
{
"userId": "12345",
"vertical": "Insurance",
"Role": "Manager"
},
{
"userId": "12367",
"vertical": "BFS",
"Role": "Associate"
}
我知道vertical
和manager
,我必须找到userId
。然后我必须找到特定用户的verticals
。
与SQL一样:
select vertical
from user
where role="Manager"
and userid in (
select userid from user
where vertical="BFS" and role="Manager"
)
请帮忙。我是这项技术的新手。
答案 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"
]
}