根据字段值包括所有级别的所有文档字段 [英] Include all document fields at all levels based on the field value
问题描述
如果某些人有权查看 cavoucher,puvendor 表单,我想创建基于卷的菜单,我只知道表单名,而表单名可以在文档中定义的任何地方,所以如何我可以得到仅与父母匹配的内容的结果吗?
i want to create roll based menu if some having permission to view cavoucher,puvendor forms here i know only form name nothing else and also the form name could be any where defined in the document so how can i get the result only matched content along with the parent
[ {
"_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"
}
]
}}
我不知道该值在哪个级别上匹配,请提出任何可能的解决方案?
I don't know at which level has the value matched please suggest any possible solution?
推荐答案
可以使用聚合管道在MongoDB中.
It can be done using the aggregation pipeline in MongoDB.
在这里,您有两个嵌套数组subMenu1
和subMenu2
首先是 $ match 获得结果.
Here in your case you have two nested arrays subMenu1
and subMenu2
first $unwind them and then use $match to achieve the result.
Mongo Shell查询
Mongo Shell Query
db.collection.aggregate([
{$unwind:"$subMenu1"},
{$unwind:"$subMenu1.subMenu2"},
{$match:{"subMenu1.subMenu2.formName":"cavoucher"}}
])
这篇关于根据字段值包括所有级别的所有文档字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!