我尝试使用REST API在云端防火墙中执行PATCH Opeartion。
这是我的申请机构
`{
"fields": {
"name": {
"stringValue":"Dinesh"
}
}
}`
当我触发请求时,文档中的所有现有字段都将被删除,只有名称字段才会更新。在文档中,他们提供了文档掩码Document Mask。但我不明白它是如何工作的,也无法找到任何样品。有人知道如何只更新文档中的一个字段而不影响其他字段吗?
答案 0 :(得分:3)
在没有DocumentMask对象的情况下,修补程序方法默认为用请求正文替换Firestore Document,而不是更新提交的字段并保留省略的字段。
DocumentMask作为updateMask参数提交,其中包含要修补的fieldPaths。我花了一段时间,但thanks to this answer并尝试了很多次,发现updateMask对象的每个fieldPath属性必须分别包含在请求url的查询字符串中:
https://firestore.googleapis.com/v1beta1/projects/{projectId}/databases/{databaseId}/documents/{document_path}?updateMask.fieldPaths=status&updateMask.fieldPaths=title
其中status
和title
是请求正文中的两个字段。请注意,如果查询字符串中省略了请求正文中包含的字段,则这些字段将保持不变。
答案 1 :(得分:2)
您的请求正常。但是您需要使用更新掩码。
通过阅读文档,我发现DocumentMask用于将文档的get或 update 操作限制为其字段的子集。因此,通过在掩码上的字段路径中添加“名称”,它只允许您更新该特定字段,而其他字段不会被删除。
您可以详细了解here。
答案 2 :(得分:0)
这是另一个从firestore提供此json结构的示例
"fields": {
"eth0": {
"mapValue": {
"fields": {
"address": {
"stringValue": "172.0.0.1"
},
"port": {
"stringValue": "8080"
},
"endpoint": {
"stringValue": "10.0.5.24"
}
}
}
}
}
然后仅更新endpoint
字段
curl -sSLX PATCH \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-type: application/json" \
-d "{
\"fields\": {
\"eth0\": {
\"mapValue\": {
\"fields\": {
\"endpoint\": {
\"stringValue\": \"10.10.2.24\"
}
}
}
}
}
}" \
"https://firestore.googleapis.com/v1/projects/{project-id}/databases/(default)/documents/{collection}/{document}?updateMask.fieldPaths=eth0.endpoint")