如何按$开头的属性查找

时间:2019-07-15 07:38:02

标签: couchdb couchdb-mango

我尝试按属性以_find端点查询沙发数据库服务器,以'$'(在我的情况下为$ ref)开头。但是服务器总是返回空文档集。

  1. 我有如下这样的beddb文件:
{
  "_id": "59bb208006149f50bb32f76f4900ccfa",
  "_rev": "1-99022821cc2bb3ab0bdd84ab98b55828",
  "contents": {
    "eClass": "auth#//User",
    "name": "SuperAdminUser",
    "roles": [
      {
        "eClass": "auth#//Role",
        "$ref": "59bb208006149f50bb32f76f4900c962?rev=1-24d9469afe50f162e473b09fdbd95154#/"
      }
    ],
    "email": "admin@mydomain.ru",
  }
}
  1. 我尝试这样查询此文档:
{
    "contents": {
        "eClass": "auth#//User",
        "roles": {
            "$elemMatch": {
                "eClass": {"$regex": ".*auth#//Role"},
                "$ref": {"$regex": "^59bb208006149f50bb32f76f4900c962.*"}
            }
        }
    }   
}

但没有返回结果。

  1. 查询方式
{
    "contents": {
        "eClass": "auth#//User",
        "roles": {
            "$elemMatch": {
                "eClass": {"$regex": ".*auth#//Role"}
            }
        }
    }   
}

按预期工作。

芒果服务器似乎无法识别$ ref之类的属性。

我试图用“ \ $ ref”转义属性,但没有成功。 (不正确 !!!,请参阅更新)

是否有任何变通方法来查询诸如$ ref之类的属性?

更新 该查询有效。

{
   "selector": {
      "contents": {
         "eClass": "auth#//User",
         "roles": {
            "$elemMatch": {
               "eClass": {
                  "$regex": ".*auth#//Role"
               },
               "\\$ref": {
                  "$regex": ".*59bb208006149f50bb32f76f4900c962.*"
               }
            }
         }
      }
   }
}

因此,只需使用“ \\ $ ref”转义样式即可。

1 个答案:

答案 0 :(得分:0)

注意:OP提供了此答案作为对问题的更新。我已将其移至此处以符合站点标准。


该查询有效。

{
   "selector": {
      "contents": {
         "eClass": "auth#//User",
         "roles": {
            "$elemMatch": {
               "eClass": {
                  "$regex": ".*auth#//Role"
               },
               "\\$ref": {
                  "$regex": ".*59bb208006149f50bb32f76f4900c962.*"
               }
            }
         }
      }
   }
}

因此只需使用“ \\ $ ref”转义样式即可。