MongoDB查询数组并仅返回包含该值的childs的父亲

MongoDB查询数组并仅返回包含该值的childs的父亲,mongodb,mongoose,Mongodb,Mongoose,我在MongoDB上有以下菜单集合。它具有权限和子菜单等值 { "_id" : ObjectId("5b42c5c8a80e160a146822e1"), "HasSubmenu" : "false", "Icon" : "fas fa-home", "MenuCode" : "PaginaInicial", "MenuName" : "Página Inicial", "MenuState" : "paginainicial",

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

{ 
    "_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]}}}}])