使用Cloud Firestore REST API无法实现文档字段自增的问题求助
解决Cloud Firestore REST API字段自增的格式问题
我看到你在尝试用Firestore REST API实现字段自增时遇到了格式错误,这两个问题其实都是因为请求体结构和API端点不匹配导致的,我来一步步帮你修正:
错误原因分析
第一个错误:请求体结构错误
你最初的请求体把currentDocument和transform拆成了writes数组里的两个独立对象,但Firestore的批量写入要求每个write条目是一个单一对象,里面可以同时包含currentDocument(用于条件判断)和transform(用于字段变换)。
第二个错误:API端点选择错误
你后续修改后出现的Unknown name "writes" at 'document'错误,说明你可能调用了单个文档操作的API端点(比如documents/{documentPath}),但批量写入的writes字段只适用于批量写入端点documents:batchWrite。
正确的实现方案
1. 使用正确的API端点
确保你调用的是批量写入的端点:
POST https://firestore.googleapis.com/v1/projects/project_name/databases/(default)/documents:batchWrite
2. 修正后的请求体
把currentDocument和transform放在同一个write对象里,同时注意increment字段的格式:你需要指定要自增的字段名(用fieldPath),而不是把字段名作为increment的键。
正确的JSON请求体如下:
{ "writes": [ { "currentDocument": { "exists": true }, "transform": { "document": "projects/project_name/databases/(default)/documents/collection_name/user_id", "fieldTransforms": [ { "fieldPath": "c", "increment": { "integerValue": "2" } } ] } } ] }
关键细节说明
fieldPath:指定要自增的字段名称(这里是c),这是你之前遗漏的部分,之前错误地把字段名直接作为increment的属性键。currentDocument:exists: true确保只有当文档存在时才执行自增操作,避免创建新文档。- 必须使用
documents:batchWrite端点,因为单个文档的update或set端点不支持transform类型的操作,只有批量写入端点支持字段变换(自增、数组添加等)。
这样修改后,发送请求就能正确把字段c的值增加2了。
内容的提问来源于stack exchange,提问作者Arnav
相关产品推荐
相关产品推荐

