[英]Cloud Firestore update nested field using the REST API
我正在使用 GAS 构建一个 Google Docs 扩展,它使用 Firebase 的 Cloud Firestore。
我有一个名为GROUPS
的集合,在该集合下我有一个名为Test
的测试文档,其中包含以下字段:
{
DISPLAY_IDS: {
TYPE1: [array_of_numbers],
TYPE2: [array_of_numbers],
TYPE3: [array_of_numbers],
}
}
我每次都需要更新一个特定的TYPE
(每次整个数组,不需要能够推送一个元素或类似的东西)。
我已经看到,为了使用常规的 JS API 来执行此操作,您可以使用点表示法,并这样做:
firestore.collection("GROUPS").document("Test").update({
"DISPLAY_IDS.TYPE2": new_array_of_numbers,
});
所以使用 REST API 我假设它会被翻译成:
payload: {
fields: {
"DISPLAY_IDS.TYPE2": new_array_of_numbers
}
}
url: "https://firestore.googleapis.com/v1beta1/projects/{projectId}/databases/{databaseId}/documents/GROUPS/Test?updateMask.fieldPaths=DISPLAY_IDS.TYPE2"
然而这并没有奏效,而是在DISPLAY_IDS
之外创建了一个名为DISPLAY_IDS.TYPE2
的新字段。
在互联网上查看了一下后,我也尝试了以下请求:
payload: {
fields: {
DISPLAY_IDS: {
TYPE2: new_array_of_numbers,
}
}
}
url: "https://firestore.googleapis.com/v1beta1/projects/{projectId}/databases/{databaseId}/documents/GROUPS/Test?updateMask.fieldPaths=DISPLAY_IDS"
但是这里发生的事情是DISPLAY_IDS
被完全覆盖,其他类型被删除。
我还尝试了上述方法的组合,因此有效负载没有点符号,而掩码带有点符号,但这根本没有更新数据库(我认为这是有道理的,因为文档指出如果字段出现在掩码中但不在有效负载中,然后它将被删除(但字段DISPLAY_IDS.TYPE2
(不是嵌套的,只是这个名称)已经不存在)以及在有效负载中但不在有效负载中的字段掩码将被忽略)。
使用 REST API 仅更新TYPE2
嵌套字段的正确方法是什么?
您可以指定一个mapValue
,如下所示:
{
"fields": {
"DISPLAY_IDS": {
"mapValue": {
"fields": {
"TYPE2": {
"stringValue": "UPDATED VALUE"
}
}
}
}
}
}
您必须在updateMask.fieldPaths
查询参数中指定DISPLAY_IDS.TYPE2
否则文档中的其他字段将被删除。 只需 append 到您的 API URL 这样做:
?updateMask.fieldPaths=DISPLAY_IDS.TYPE2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.