关于Google Firestore REST API PATCH请求保留未更新字段的技术咨询
解决Firestore REST API PATCH请求丢失未更新字段的问题
我之前也碰到过一模一样的问题,这其实是Firestore REST API的默认行为在搞鬼——如果不指定updateMask参数,PATCH请求会用你提交的内容完全覆盖原有文档,那些没出现在请求体里的字段(比如timestamp和user)自然就被删掉了。
正确的配置方式
你只需要在请求的查询参数里加上updateMask,明确告诉Firestore你只想更新哪些字段。这样一来,未被指定的原有字段就会被完整保留下来。
举个实际的例子,如果你只想更新message字段,请求URL应该写成这样:
https://firestore.googleapis.com/v1beta1/projects/[你的项目ID]/databases/(default)/documents/message/[你的文档ID]?updateMask=message
对应的curl请求示例:
curl -X PATCH \ 'https://firestore.googleapis.com/v1beta1/projects/your-project-id/databases/(default)/documents/message/your-document-id?updateMask=message' \ -H 'Authorization: Bearer [你的认证令牌]' \ -H 'Content-Type: application/json' \ -d '{ "fields": { "message": { "stringValue": "这是更新后的消息内容" } } }'
多字段更新的处理
如果需要同时更新多个字段,只需要用逗号分隔字段名即可,比如要更新message和timestamp:
updateMask=message,timestamp
关键注意点
updateMask里的字段名必须和请求体fields中的键完全匹配,Firestore对字段名大小写敏感。- 请求体里只需要包含你要更新的字段,不用把所有字段都重复写一遍。
按照这个配置发送请求,timestamp和user字段就不会再被意外删除了!
内容的提问来源于stack exchange,提问作者Ondřej Rehák




