问题描述
我有 user
集合,其中包含具有 roleId 的角色对象。我也有 roles
集合,其中包含 id。
例如:
[
{
"name": "Scott","role": {
"roleId": "123432"
}
},{
"name": "John",{
"name": "Scott","role": {
"roleId": "556432"
}
}
]
角色数据:
[
{
"id": "123432"
"name": "admin","type": "internal"
},{
"id": "556432"
"name": "owner","type": "external"
},"type": "internal"
}
]
现在我想获取所有类型为 internal
的角色及其相关用户:
所以,输出应该是,
[
{
"role": "123432","users": [
{
"name": "Scott","role": {
"roleId": "123432"
}
},{
"name": "John","role": {
"roleId": "123432"
}
}
],{
"role": "556432","users": []
}
}
]
我正在使用 Spring Boot 进行此操作。如果有人可以帮助我了解如何使用 Spring Boot mongo 获取此聚合,那将对我非常有帮助。非常感谢。
解决方法
对您的角色集合执行聚合,并首先根据您的条件过滤掉角色。由于您想要所有 internal
角色,因此您的比赛阶段应该是:
{
$match: {
"type": "internal"
}
}
现在是查找每个角色的用户的时候了:
{
$lookup: {
from: "user",as: "users",localField: "id",foreignField: "role.roleId"
}
}
我不知道 mongo 查询是如何在 Spring Boot 上执行的,但它是如何在 mongo 上完成的,因此您可以将其转换为您的语言特定代码。
这是一个关于 mongo playground 的工作示例。