MongoDB查询数组,并只返回包含该值的父子关系



我在MongoDB上有以下菜单集合。它具有"权限"one_answers"子菜单"等值。

{ 
"_id" : ObjectId("5b42c5c8a80e160a146822e1"), 
"HasSubmenu" : "false", 
"Icon" : "fas fa-home", 
"MenuCode" : "PaginaInicial", 
"MenuName" : "Página Inicial", 
"MenuState" : "paginainicial", 
"Permission" : 1
"Submenu" : [ ], 
},
{ 
"_id" : ObjectId("5b42c5c8a80e160a146822e2"), 
"HasSubmenu" : "true", 
"Icon" : "far fa-file-alt", 
"MenuCode" : "FormulariosApoio", 
"MenuName" : "Formularios de Apoio", 
"MenuState" : "",
"Permission" : 1
"Submenu" : [
{
"MenuState" : "tiposassociados", 
"MenuName" : "Tipos Associados", 
"MenuCode" : "TiposAssociados", 
"Icon" : "fas fa-tags", 
"HasSubmenu" : false, 
"Permission" : 1
}, 
{
"MenuState" : "naturalidades", 
"MenuCode" : "Naturalidade", 
"MenuName" : "Naturalidade", 
"Icon" : "fas fa-globe-asia", 
"HasSubmenu" : false, 
"Permission" : 4
}, 
{
"MenuState" : "nacionalidades", 
"MenuCode" : "Nacionalidade", 
"MenuName" : "Nacionalidade", 
"Icon" : "fas fa-globe-americas", 
"HasSubmenu" : false, 
"Permission" : 4
},     
]

}

我需要帮助返回,只有值为{"权限":1}的菜单和子菜单,即使菜单没有任何子菜单

试过这个,但不起作用。

db.getCollection("menus").find({
$and: [
{"Submenu" : { $elemMatch : {"Permission": 1}}},
{"Permission": 1},
]   
});

您可以尝试使用$filter聚合

db.collection.aggregate([
{ "$match": { "Permission": 1 } },
{ "$addFields": {
"Submenu": {
"$filter": {
"input": "$Submenu",
"as": "submenu",
"cond": {
"$eq": [ "$$submenu.Permission", 1 ]
}
}
}
}}
])

最新更新