You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Google Firestore REST API PATCH请求保留未更新字段的技术咨询

解决Firestore REST API PATCH请求丢失未更新字段的问题

我之前也碰到过一模一样的问题,这其实是Firestore REST API的默认行为在搞鬼——如果不指定updateMask参数,PATCH请求会用你提交的内容完全覆盖原有文档,那些没出现在请求体里的字段(比如timestampuser)自然就被删掉了。

正确的配置方式

你只需要在请求的查询参数里加上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": "这是更新后的消息内容"
      }
    }
  }'

多字段更新的处理

如果需要同时更新多个字段,只需要用逗号分隔字段名即可,比如要更新messagetimestamp

updateMask=message,timestamp

关键注意点

  • updateMask里的字段名必须和请求体fields中的键完全匹配,Firestore对字段名大小写敏感。
  • 请求体里只需要包含你要更新的字段,不用把所有字段都重复写一遍。

按照这个配置发送请求,timestampuser字段就不会再被意外删除了!

内容的提问来源于stack exchange,提问作者Ondřej Rehák

火山引擎 最新活动