大家好,我有一个像bellow这样的文档集合,我想直接从roles数组中获取“权限”参数:_id,组._id,角色._id使用java mongo驱动程序。
{
"_id": 1000002,
"groups": [
{
"_id": 1,
"roles": [
{
"rights": 3,
"_id": 1
},
{
"rights": 7,
"_id": 2
},
{
"rights": 3,
"_id": 3
}
]
}
],
"timestamp": {
"$date": {
"$numberLong": "1675267318028"
}
},
"users": [
{
"accessProviderId": 1,
"rights": 1,
"_id": 4
},
{
"accessProviderId": 1,
"rights": 3,
"_id": 5
}
]
}
我有代表这个文档的AccessListItem类,我已经使用Bson过滤器从mongo中获取它,但是在获取之后,我必须通过java函数获取信息。我想直接从mongo库中获取int值。
Bson fileFilter = Filters.eq("_id", itemId);
Bson groupFilter = Filters.elemMatch("groups", Document.parse("{_id:"+groupId+"}"));
Bson roleFilter = Filters.elemMatch("groups.roles", Document.parse("{_id:"+role+"}"));
Bson finalFilter = Filters.and(fileFilter, Filters.and(groupFilter,roleFilter));
MongoCollection<AccessListItem> accessListItemMongoCollection = MongoUtils.getAccessCollection(type);
AccessListItem accessListItem = accessListItemMongoCollection.find(finalFilter).first();
1条答案
按热度按时间bgtovc5b1#
简单的回答是你不能。
MongoDB是为返回文档而设计的,也就是包含键-值对的对象,MongoDB查询没有只返回一个值的机制,也就是说,它永远不会只返回
3
或[3]
。您可以使用聚合,并在最后使用$project stage,以获得简化的对象,如:
在javascript中可能看起来像:
示例:Playground
我不熟悉springboot,所以我不确定它在Java中是什么样子的。