根据字段值包括所有级别的所有文档字段

问题描述 投票:0回答:1

我想创建基于滚动的菜单,如果有人有权查看cavoucher,puvendor表单,我知道只有表单名称,而且表单名称可以是文档中定义的任何位置,那么我怎样才能得到结果只匹配的内容以及父母

   [ { 
"_id" : ObjectId("57ef642fd4f27bb41b697314"), 
"menuDesc" : "Cash Module", 
"formName" : "", 
"subMenu1" : [
    {
        "menuDesc" : "Setup", 
        "formName" : "", 
        "subMenu2" : [
            {
                "menuDesc" : "Setup Bank Details", 
                "formName" : "cabank", 
            }
        ]
    }, 
    {
       "menuDesc" : "Vouchers", 
        "formName" : "", 
        "subMenu2" : [
            {
                "menuDesc" : "Maintain Cash Voucher", 
                "formName" : "cavoucher", 
            }, 
            {
                "menuName" : "Paid Voucher", 
                "menuDesc" : "Maintain Paid Voucher", 
                "formName" : "capaidvchr", 
            }
        ]
    }
    ]
},
{ 
"_id" : ObjectId("57ef6464d4f27bb41b697316"), 
"menuDesc" : "Purchase Module", 
"formName" : "", 
"subMenu1" : [
    {
        "menuDesc" : "Maintain Vendors", 
        "formName" : "puvendor" 
        }
]
}] 

我正在寻找的结果

    [{ 
"_id" : ObjectId("57ef642fd4f27bb41b697314"),
"menuDesc" : "Cash Module", 
"formName" : "", 
"subMenu1" : [
    {
        "menuDesc" : "Vouchers", 
        "formName" : "", 
        "subMenu2" : [
            {
                "menuDesc" : "Maintain Cash Voucher", 
                "formName" : "cavoucher", 
            }
        ]
    }
  ]
 },{ 
"_id" : ObjectId("57ef6464d4f27bb41b697316"), 
"menuDesc" : "Purchase Module", 
"formName" : "", 
"subMenu1" : [
    {
        "menuDesc" : "Maintain Vendors", 
        "formName" : "puvendor" 
        }
]
}}

我不知道哪个级别的值匹配请建议任何可能的解决方案?

javascript json mongodb
1个回答
0
投票

可以使用MongoDB中的aggregation pipeline来完成。

在你的情况下你有两个嵌套数组subMenu1subMenu2首先$unwind他们然后使用$match来实现结果。

Mongo Shell查询

db.collection.aggregate([
    {$unwind:"$subMenu1"}, 
    {$unwind:"$subMenu1.subMenu2"},
    {$match:{"subMenu1.subMenu2.formName":"cavoucher"}}
 ])
© www.soinside.com 2019 - 2024. All rights reserved.