【问题标题】:Include all document fields at all levels based on the field value根据字段值包括所有级别的所有文档字段
【发布时间】:2017-12-11 07:06:23
【问题描述】:

如果有人有权查看 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】:

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

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

    Mongo Shell 查询

    db.collection.aggregate([
        {$unwind:"$subMenu1"}, 
        {$unwind:"$subMenu1.subMenu2"},
        {$match:{"subMenu1.subMenu2.formName":"cavoucher"}}
     ])
    

    【讨论】:

    • 当展开我的结果转换为对象。我希望我的子文档在数组中......
    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2012-05-10
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多