【问题标题】:Firestore Update a document field Using Rest APIFirestore 使用 Rest API 更新文档字段
【发布时间】:2018-03-23 10:45:52
【问题描述】:

我正在尝试使用 REST API 在云 Firestore 中执行 PATCH Opeartion。

这是我的请求正文

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

当我触发请求时,文档中的所有现有字段都将被删除,只有名称字段正在更新。在文档中,他们给出了文档掩码Document Mask。但我不明白它是如何工作的,我也找不到任何样本。有人知道如何只更新文档中的一个字段而不影响其他字段吗?

【问题讨论】:

  • 您应该在路径“field/name/stringValue”处设置“Dinesh”。它将用“Dinesh”更新“stringValue”的值。即 path = "field/name/stringValue", yourObject = "Dinesh"。
  • @Tushar Sheth 我不认为它是这样工作的,我已经尝试过了,你有任何工作代码示例吗?

标签: firebase google-cloud-firestore


【解决方案1】:

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

DocumentMask 作为包含要修补的 fieldPaths 的 updateMask 参数提交。花了一段时间,但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

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

【讨论】:

  • 你成就了我的一天! 2 天后,我找到了您的简单示例,它有所帮助。谢谢!
【解决方案2】:

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

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

您可以阅读更多关于它的信息here

【讨论】:

    【解决方案3】:

    这是另一个从 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")
    

    【讨论】:

      猜你喜欢
      • 2020-03-23
      • 2020-11-26
      • 2021-09-15
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多