单个集合的聚合查询
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"
}
我知道 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"
)
请帮忙解决这个问题。我是这项技术的新手。
问题: 我们想要获取 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"
]
}
我的数据库包含一个用户 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"
)
请帮忙解决这个问题。我是这项技术的新手。
问题: 我们想要获取 BFS 垂直领域的经理也在其他垂直领域扮演经理角色的数据.
我会使用 聚合框架 来处理这个问题 MongoDB。
下面是对每个管道的解释。
1) $Match - 获取角色为经理的所有数据,因为我们只对经理角色感兴趣
2) $project - 只是一个临时管道,用于将字段投影到下一个管道
3) $group - 类似于 SQL 按 userId 对数据进行分组并将其垂直添加到数组中
4) $Match - 过滤属于 BFS
一部分的用户 IDdb.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"
]
}