繁体   English   中英

如何在mongodb中检索选定的数组对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM