【发布时间】:2021-09-20 21:30:18
【问题描述】:
我有user 集合,其中包含具有roleId 的角色对象。我也有 roles 有 id 的集合。
现在,对于每个角色,我想获取用户列表。
例如:
[
{
"name": "Scott",
"isActive": true,
"role": {
"roleId": "123432"
}
},
{
"name": "John",
"isActive": true,
"role": {
"roleId": "123432"
}
},
{
"name": "Scott",
"isActive": true,
"role": {
"roleId": "556432"
}
}
]
角色数据:
[
{
"id": "123432"
"name": "admin",
"type": "internal"
},
{
"id": "556432"
"name": "owner",
"type": "external"
},
{
"id": "556432"
"name": "owner",
"type": "internal"
}
]
现在我想获取internal 类型的所有角色及其相关用户:
所以,输出应该是,
[
{
"role": "123432",
"users": [
{
"name": "Scott",
"role": {
"roleId": "123432"
}
},
{
"name": "John",
"role": {
"roleId": "123432"
}
}
],
{
"role": "556432",
"users": []
}
}
]
这是我在 SpringBoort 中的聚合:
LookupOperation lookupOperation = LookupOperation.newLookup().from("roles").localField("roleId")
.foreignField("_id").as("roles");
AggregationOperation match = Aggregation.match(Criteria.where("type").is("internal"));
Aggregation aggregation = Aggregation.newAggregation(lookupOperation, match);
List<UserDTO> results = mongoTemplate.aggregate(aggregation, "users", UserDTO.class).getMappedResults();
但这不起作用。匹配过滤器与主表(用户)字段一起使用。但它不适用于外国收藏(角色)
有人可以帮我解决这个问题吗?
【问题讨论】:
标签: mongodb aggregation-framework spring-data-mongodb