Firestore:REST API runQuery方法需要错误的父路径模式

时间:2018-04-18 11:54:46

标签: python rest google-cloud-firestore

我正在尝试使用Firestore REST API执行简单查询。

使用Google App Engine标准我无法使用尚未与GAE标准兼容的google-cloud-firestore客户端。相反,我正在使用google-api-python-client和其他Google API。

这是我初始化服务的方式:

service = build('firestore', 'v1beta1', credentials=_credentials)

完成后,我会以这样的方式执行查询:

query = { "structuredQuery":
          {
            "from": [{ "collectionId": "mycollection" }],
            "where": {
              "fieldFilter":
              {
                "field": { "fieldPath": "myfield" },
                "op": "EQUAL",
                "value": { "stringValue": "myvalue" }
              }
            }
          }
        }

response = service.projects().databases().documents().runQuery(
            parent='projects/myprojectid/databases/(default)/documents',
            body=query).execute()

这会非常明确地返回错误:

  

TypeError:参数“parent”值   “项目/ myprojectid /数据库/(默认)/文件”   与模式不匹配   “^项目/ [^ /] + /数据库/ [^ /] + /文件/[^/]+/.+$"

这显然是真的。我的观点是文件清晰地说明这应该是一个可接受的值:

  

父资源名称。格式为:projects/{project_id}/databases/{database_id}/documentsprojects/{project_id}/databases/{database_id}/documents/{document_path}。例如:projects/my-project/databases/my-database/documentsprojects/my-project/databases/my-database/documents/chatrooms/my-chatroom(字符串)

使用API​​ Explorer(或curl)执行相同的查询工作正常,返回预期结果。 (即使API Explorer确实声明父参数与预期模式不匹配)。

API Explorer pattern not matching

似乎发现文档(由google-api-python-client使用)强制对父参数进行此模式检查,但关联的正则表达式实际上并不允许似乎有效的唯一父路径(项目/ myprojectid /数据库/(默认值)/文档)。

我尝试使用不同的模式路径,例如projects/myprojectid/databases/(default)/documents/*/**,这使得查询运行正常,但不会返回任何结果。

是否有人遇到同样的问题,或者我在这里做错了什么? 我能想到的唯一解决方法是在不使用google-api-python-client的情况下直接向正确的URL发出请求,但这意味着我必须手动处理auth进程,这很痛苦。

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

google-cloud-firestore现在与标准App Engine兼容。

https://cloud.google.com/firestore/docs/quickstart-servers