首页 > 解决方案 > Firestore 补丁映射值 REST API

问题描述

我正在尝试使用 POSTMAN 发送一个发布请求来更新一个地图条目的值,但我无法找到正确的语法。这就是我在我的数据库中发布数据的方式:

{
    "fields" : {
        "8" : { 
            "mapValue" : { 
                "fields" : {
                     "f1" :  { "stringValue" : "A" },
                     "end" :  { "integerValue" : "9" },
                }
            }
        },
        "9" : { 
            "mapValue" : { 
                "fields" : {
                     "f1" :  { "stringValue" : "A" },
                     "end" :  { "integerValue" : "10" },
                }
            }
        },
    }
}

如何将键 8 的值 f1 修改为 "B" ?

标签: firebaserestgoogle-cloud-firestore

解决方案


要更新某些值,您需要使用PATCH。Firestore Map Values 是对象,可通过查询参数中的更新掩码访问,您还需要为要更新的资源定义JSON 请求正文。

因此,对于端点,它看起来像这样:

https://firestore.googleapis.com/v1/projects/{project_id}/databases/{database_id}/documents/{document_path}?updateMask.fieldPaths=KEYVALUE.VALUE

如您所见,您需要使用点表示法,因为地图值是对象

请求正文:

{
"fields": {
    "A8": {
      "mapValue": {
        "fields": {
          "f1": {
            "stringValue": "B"
          }
        }
      }
    }
  }
}

需要注意的一件事是,您的密钥只是数字。Firestore 不喜欢这样,所以将它们更改为字母数字键(如“A8”而不是“8”)。一旦您更改它们,就可以访问您的值,例如A8.f1

如果要更新多个键,请将它们添加到带有 & 号的查询参数中,如下所示:

?updateMask.fieldPaths=A8.f1&updateMask.fieldPaths=A9.f1

并添加额外的 JSON 以便在同一个请求中进行更改;

{
"fields": {
    "A8": {
      "mapValue": {
        "fields": {
          "f1": {
            "stringValue": "B"
          }
        }
      }
    },
    "A9": {
      "mapValue": {
        "fields": {
          "f1": {
            "stringValue": "C"
          }
        }
      }
    }
  }
}

PS:记得使用你的 Bearer Token 来发出请求。

以下是一些地图值参考链接:

https://firebase.google.com/docs/firestore/manage-data/data-types https://cloud.google.com/firestore/docs/reference/rest/v1/Value


推荐阅读