Mongodb Search nested array elements

爱⌒轻易说出口 提交于 2019-12-25 09:42:38

问题


I have a below data. Would like to search aclpermissions where any of the elements (CRT, READ, DLT, UPD) will match to an array of inputs.

Below query

db.AMSAppACL.find({"aclpermissions.READ" : {'$in': ['58dc0bea0cd182789fc62fab']}}).pretty();

only searches READ element. Is there any way to search all the elements instead of using or queries and aggregate

{
        "_id" : ObjectId("5900d6abb9eb284a78f5a350"),
        "_class" : "com.debopam.amsapp.model.AMSAppACL",
        "attrUniqueCode" : "USER",
        "attributeVersion" : 1,
        "aclpermissions" : {
                "CRT" : [
                        "58dc0bd70cd182789fc62faa"
                ],
                "READ" : [
                        "58dc0bd70cd182789fc62faa",
                        "58dc0bea0cd182789fc62fab"
                ],
                "UPD" : [
                        "58dc0bd70cd182789fc62faa"
                ],
                "DLT" : [
                        "58dc0bd70cd182789fc62faa"
                ]
        },
        "orgHierachyIdentifier" : "14",
        "orgid" : 14,
        "createDate" : ISODate("2017-04-26T17:19:39.026Z"),
        "lastModifiedDate" : ISODate("2017-04-26T17:19:39.026Z"),
        "createdBy" : "appadmin",
        "lastModifiedBy" : "appadmin"
}

回答1:


You should try updating aclpermissions part of schema from dynamic keys to labeled keys.

"aclpermissions":
     [
       {k:"CRT", v: ["58dc0bd70cd182789fc62faa"]},
       {k:"READ", v: [ "58dc0bd70cd182789fc62faa", "58dc0bea0cd182789fc62fab"]}....
     ]

Now you can update the query from post to something like

db.AMSAppACL.find({"aclpermissions.v" : {'$in': ['58dc0bea0cd182789fc62fab']}}).pretty();


来源:https://stackoverflow.com/questions/43665112/mongodb-search-nested-array-elements

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!