Mongodb 具有嵌入式透视列表的多对多
我正在尝试选择引用组的所有用户,该组引用的权限“valid”设置为true(可能是多个)。为了实现这一点,我计划使用带有查找的聚合Mongodb 具有嵌入式透视列表的多对多,mongodb,Mongodb,我正在尝试选择引用组的所有用户,该组引用的权限“valid”设置为true(可能是多个)。为了实现这一点,我计划使用带有查找的聚合 db={ “用户”:[ { “_id”:“1”, “团体”:[ "2" ] }, { “_id”:“2”, “团体”:[ "1" ] } ], “集团”:[ { “_id”:“1”, “权限”:[ "12", "3" ] }, { “_id”:“2”, “权限”:[ "3", "2" ] } ], “许可”:[ { “_id”:“12”, “有效”:真 }, { “
db={
“用户”:[
{
“_id”:“1”,
“团体”:[
"2"
]
},
{
“_id”:“2”,
“团体”:[
"1"
]
}
],
“集团”:[
{
“_id”:“1”,
“权限”:[
"12",
"3"
]
},
{
“_id”:“2”,
“权限”:[
"3",
"2"
]
}
],
“许可”:[
{
“_id”:“12”,
“有效”:真
},
{
“_id”:“3”,
“有效”:真
},
{
“_id”:“2”,
“有效”:真
}
]
}
我想不出一个有效/简单的方法来做这件事
我有两个想法:
- 您可以在查找中使用对象的直接数组而不使用
作为本地字段$unwind
- 第二次查找将用
响应替换权限
字段,因为下一阶段不需要它组
db.users.aggregate([
{
$lookup: {
from: "group",
localField: "groups",
foreignField: "_id",
as: "group"
}
},
{
$lookup: {
from: "permission",
localField: "group.permissions",
foreignField: "_id",
as: "group"
}
},
{ $match: { "group.valid": true } },
{ $unset: "group" }
])