MongoDB查询数组并仅返回包含该值的childs的父亲
我在MongoDB上有以下菜单集合。它具有权限和子菜单等值MongoDB查询数组并仅返回包含该值的childs的父亲,mongodb,mongoose,Mongodb,Mongoose,我在MongoDB上有以下菜单集合。它具有权限和子菜单等值 { "_id" : ObjectId("5b42c5c8a80e160a146822e1"), "HasSubmenu" : "false", "Icon" : "fas fa-home", "MenuCode" : "PaginaInicial", "MenuName" : "Página Inicial", "MenuState" : "paginainicial",
{
"_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},
]
});
您可以尝试使用聚合
db.collection.aggregate([
{ "$match": { "Permission": 1 } },
{ "$addFields": {
"Submenu": {
"$filter": {
"input": "$Submenu",
"as": "submenu",
"cond": {
"$eq": [ "$$submenu.Permission", 1 ]
}
}
}
}}
])
您可以使用
db.getCollection(“菜单”).find({“Submenu.Permission”:1,“Permission”:1},{“Submenu.$”:1})代码>如果子菜单中只有一个匹配项。如果需要多个匹配项,则必须使用$filter
。类似于db.getCollection(“菜单”).aggregate([{$match:{“Submenu.Permission”:1,“Permission”:1},{$project:{$Submenu:{$filter:{input:'$Submenu',as:'su cond:{$eq:['$$su Submenu.Permission',1]}}}}])