[英]how to retrieve selected array object in mongodb
我有这样的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
}
我只想在UIList中的UiName:“ ManageFacility”的下面检索View:true。
我试图获取此查询之后的数据,但它检索Uiname:,View,Edit值下的所有UIList。
db.getCollection("manage_roles_news").find(
{ _id:ObjectId("58eb32fb58bbf720a80daf6f")},
{UIList: {$elemMatch: {UiName: "ManageFacility"}}});
如何在Uiname下的UIlist中检索该唯一视图:“ ManageFacility”
谁能告诉我
我认为没有办法从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]}
}
}
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.