Firestore REST API:向数组字段追加对象的实现方法
用Firestore REST API向数组字段追加元素(不覆盖原有数据)
你之前尝试的普通PATCH+updateMask方式之所以会覆盖整个Messages数组,是因为这种方式是直接替换整个字段值,而不是追加元素。要实现数组追加,得用Firestore专门提供的**arrayUnion字段变换**——它能安全地把新元素添加到数组末尾,同时不会影响原有数据。
具体实现步骤
请求方法与URL
使用PATCH请求,URL格式如下(替换掉括号里的占位符):https://firestore.googleapis.com/v1/projects/[你的项目ID]/databases/(default)/documents/[集合名称]/[文档ID]请求头
必须包含两个关键头信息:Content-Type: application/json:告诉服务器请求体是JSON格式Authorization: Bearer [你的访问令牌]:用于身份验证,令牌需要有Firestore数据更新的权限
请求体(核心部分)
要严格按照Firestore的JSON数据结构来构造,用arrayUnion指定要追加的元素:{ "fields": { "Messages": { "arrayUnion": { "values": [ { "mapValue": { "fields": { "senderId": { "stringValue": "id-1" }, "text": { "stringValue": "How are you" } } } } ] } } } }arrayUnion:Firestore的数组追加指令,只会添加数组中不存在的元素(完全匹配的元素会被自动跳过)mapValue:用来构造你要追加的对象,每个字段都要对应Firestore的类型值(比如字符串用stringValue)
完整curl示例
如果用curl测试的话,直接运行下面的命令(替换占位符):
curl -X PATCH \ 'https://firestore.googleapis.com/v1/projects/your-project-id/databases/(default)/documents/your-collection/your-document-id' \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "fields": { "Messages": { "arrayUnion": { "values": [ { "mapValue": { "fields": { "senderId": { "stringValue": "id-1" }, "text": { "stringValue": "How are you" } } } } ] } } } }'
额外说明
- 如果你要一次性追加多条消息,只需要在
values数组里添加更多mapValue对象即可 - 若新元素和数组中已有元素完全一致(所有字段的键和值都相同),
arrayUnion会自动跳过该元素,避免重复添加
内容的提问来源于stack exchange,提问作者user3574857
相关产品推荐
相关产品推荐

