我正在尝试使用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}/documents
或projects/{project_id}/databases/{database_id}/documents/{document_path}
。例如:projects/my-project/databases/my-database/documents
或projects/my-project/databases/my-database/documents/chatrooms/my-chatroom
(字符串)
使用API Explorer(或curl)执行相同的查询工作正常,返回预期结果。 (即使API Explorer确实声明父参数与预期模式不匹配)。
似乎发现文档(由google-api-python-client使用)强制对父参数进行此模式检查,但关联的正则表达式实际上并不允许似乎有效的唯一父路径(项目/ myprojectid /数据库/(默认值)/文档)。
我尝试使用不同的模式路径,例如projects/myprojectid/databases/(default)/documents/*/**
,这使得查询运行正常,但不会返回任何结果。
是否有人遇到同样的问题,或者我在这里做错了什么? 我能想到的唯一解决方法是在不使用google-api-python-client的情况下直接向正确的URL发出请求,但这意味着我必须手动处理auth进程,这很痛苦。
感谢您提供的任何帮助!
答案 0 :(得分:0)
google-cloud-firestore
现在与标准App Engine兼容。