【问题标题】:Mongodb Search nested array elementsMongodb 搜索嵌套数组元素
【发布时间】:2017-04-28 05:04:36
【问题描述】:

我有以下数据。想要搜索任何元素(CRT、READ、DLT、UPD)与输入数组匹配的 aclpermission。

以下查询

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

仅搜索 READ 元素。有没有办法搜索所有元素而不是使用 or 查询和聚合

{
        "_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"
}

【问题讨论】:

  • 如果您可以更改架构,您应该创建键值对。键是名称,值是 id 数组。
  • 仍然是键值对。 :[值:字符串数组]。你想让我做其他事情,即把它从 aclpermissions 中取出吗?如果是,那么我将如何实现我的目标

标签: mongodb mongodb-query


【解决方案1】:

您应该尝试将架构的 aclpermissions 部分从动态键更新为标记键。

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

现在您可以将查询从 post 更新为类似

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

【讨论】:

    猜你喜欢
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2015-06-29
    • 2018-10-06
    • 2022-01-22
    • 2017-04-12
    • 2018-08-02
    相关资源
    最近更新 更多