Firebase Firestore使用Rest API更新文档字段

Firebase Firestore使用Rest API更新文档字段,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我正在尝试使用RESTAPI在CloudFireStore中执行补丁操作 这是我的请求机构 `{ "fields": { "name": { "stringValue":"Dinesh" } } }` 当我发出请求时,文档中的所有现有字段都会被删除,只有name字段会被更新。在文档中,他们给出了文档掩码。但是我不明白它是怎么工作的,我也找不到任何样品。有人知道如何在不影响其他字段的情况下只更新文档中的一个字段吗?您的请求正文正常。但是您需要使用更新掩码 通过

我正在尝试使用RESTAPI在CloudFireStore中执行补丁操作

这是我的请求机构

`{
  "fields": {
    "name": {
      "stringValue":"Dinesh"
    }
  }
}`

当我发出请求时,文档中的所有现有字段都会被删除,只有name字段会被更新。在文档中,他们给出了文档掩码。但是我不明白它是怎么工作的,我也找不到任何样品。有人知道如何在不影响其他字段的情况下只更新文档中的一个字段吗?

您的请求正文正常。但是您需要使用更新掩码

通过阅读文档,我发现DocumentMask用于将文档上的get或更新操作限制为其字段的子集。因此,通过将“名称”添加到掩码上的字段路径,它只允许您更新该特定字段,其他字段不会被删除


您可以阅读更多信息。

如果没有DocumentMask对象,补丁方法默认使用请求正文替换Firestore文档,而不是更新提交的字段并保留省略的字段

DocumentMask作为包含要修补的字段路径的updateMask参数提交。花了一段时间,但经过多次尝试,我发现updateMask对象的每个fieldPath属性都需要分别包含在请求url的查询字符串中:

https://firestore.googleapis.com/v1beta1/projects/{projectId}/databaseId}/documents/{document_path}?updateMask.fieldpath=status&updateMask.fieldpath=title


其中,
status
title
是请求正文中的两个字段。请注意,如果查询字符串中省略了请求正文中包含的字段,则这些字段将被忽略,保持不变

下面是另一个示例,给出了firestore中的json结构

"fields": {
    "eth0": {
      "mapValue": {
        "fields": {
          "address": {
            "stringValue": "172.0.0.1"
          },
          "port": {
            "stringValue": "8080"
          },
          "endpoint": {
            "stringValue": "10.0.5.24"
          }
        }
      }
    }
  }
然后仅更新
端点
字段

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")

您应该在路径“field/name/stringValue”处设置“Dinesh”。它将“stringValue”的值向上插入“Dinesh”。i、 e.path=“field/name/stringValue”,yourObject=“Dinesh”。@Tushar Sheth我不认为它是这样工作的,我已经试过了,你有任何工作代码示例吗?你让我很开心!两天后,我找到了你的简单示例,它很有帮助。非常感谢。