【发布时间】:2018-12-29 11:40:33
【问题描述】:
我有两个集合,一个是权限,另一个是角色。现在我需要通过权限对象 ID 连接从这两个集合中检索数据,我的查询运行良好,但无法获得所需的结果。收藏详情如下。
权限:
{
"_id" : ObjectId("5b4998d4abb4369f8c1ad0d6"),
"roleName" : "Super top level",
"permissions" : [
{
"_id" : ObjectId("5b49982d34f95d80609ce99d"),
"access" : [
"view_graph",
"view_daily_trip",
"view_profit"
]
},
{
"_id" : ObjectId("5b49982d34f95d80609ce99e"),
"access" : [
"view",
"add",
"edit",
"delete",
"special",
"disable"
]
},
{
"_id" : ObjectId("5b49982d34f95d80609ce99f"),
"access" : [
"trip_view",
"trip_add",
"trip_edit",
"trip_delete",
"trip_special",
"trip_disable"
]
}
]
}
角色:
{
"_id" : ObjectId("5b4998d4abb4369f8c1ad0d6"),
"roleName" : "Super top level",
"permissions" : [
{
"_id" : ObjectId("5b49982d34f95d80609ce99d"),
"access" : [
"view_graph",
"view_daily_trip",
"view_profit"
]
},
{
"_id" : ObjectId("5b49982d34f95d80609ce99e"),
"access" : [
"view",
"add",
"edit",
"delete"
]
},
{
"_id" : ObjectId("5b49982d34f95d80609ce99f"),
"access" : [
"trip_view",
"trip_add",
"trip_edit"
]
}
]
}
要求的结果:
[
{
"_id": "5b4998d4abb4369f8c1ad0d6",
"roleName": "Mid level",
"permissions": [
{
"_id": "5b49982d34f95d80609ce99d",
"access": [
"view_graph",
"view_daily_trip",
"view_profit"
],
"permissionGroups": "Dashboard",
"allAccess": [
"view_graph",
"view_daily_trip",
"view_profit"
]
},
{
"_id": "5b49982d34f95d80609ce99e",
"access": [
"view",
"add",
"edit",
"delete"
],
"permissionGroups": "User",
"allAccess": [
"view",
"add",
"edit",
"delete",
"special",
"disable"
]
},
{
"_id": "5b49982d34f95d80609ce99f",
"access": [
"trip_view",
"trip_add",
"trip_edit"
],
"permissionGroups": "Trip",
"access": [
"trip_view",
"trip_add",
"trip_edit",
"trip_delete",
"trip_special",
"trip_disable"
]
}
]
}
]
我已经尝试了很多使用$lookup, $unwind, $project 和$group 但没有给我这个结果。
你能帮我写出确切的查询吗?您的帮助将不胜感激。
谢谢:)
【问题讨论】:
-
您的两个集合都具有相同的 JSON?哪一个是两者的共同键?
-
@Anthony Winzlet,实际上并非如此,这取决于角色,有些角色将包含所有访问字符串,有些角色将很少,并且两者都有一个共同的对象 ID。
标签: mongodb mongodb-query