我有像这样的mongodb数据
{
"_id" : ObjectId("58eb32fb58bbf720a80daf6f"),
"RoleName" : "Admin",
"UIList" : [
{
"UiName" : "ManageRole",
"View" : true,
"Edit" : false,
"_id" : ObjectId("58eb32fb58bbf720a80daf79")
},
{
"UiName" : "ManageBuildings",
"View" : false,
"Edit" : false,
"_id" : ObjectId("58eb32fb58bbf720a80daf78")
},
{
"UiName" : "ManageFacility",
"View" : true,
"Edit" : false,
"_id" : ObjectId("58eb32fb58bbf720a80daf77")
}
],
"__v" : 0,
"Description" : "Full Control",
"IsActive" : true
}
我想在UiName下的UIList中仅检索View:true:“ManageFacility”如何检索它。
我尝试在此查询后获取数据,但它会检索所有UIList Under Uiname:,View,Edit值。
db.getCollection("manage_roles_news").find(
{ _id:ObjectId("58eb32fb58bbf720a80daf6f")},
{UIList: {$elemMatch: {UiName: "ManageFacility"}}});
如何在Uiname下的UIlist中仅检索该视图:“ManageFacility”
任何人都可以告诉我
答案 0 :(得分:1)
我认为没有方法可以投射positional/elemMatch
投影中的各个字段。它总是解析为数组元素。
您可以尝试以下聚合到项目字段。以下查询使用$filter运算符查找匹配的数组值,这些值通过管道传递给$arrayAtElem以返回第一个元素(0)
,并将匹配的文档传递给$let运算符,然后是选择View
属性。
db.getCollection("manage_roles_news").aggregate(
{ $match: { _id: ObjectId("58eb32fb58bbf720a80daf6f") } },
{ $project: {
_id:0,
View:
{ $let: {
vars: {
mElement: {
$arrayElemAt: [{
$filter: {
input: "$UIList",
as: "fElement",
cond: {
$eq: ["$$fElement.UiName", "ManageFacility"]
}
}
}, 0]
}
},
in: {$cond:["$$mElement.View", 1, 0]}
}
}
}
})