firebase 如何删除Firestore文档中的字段-字段的键包含点

k7fdbhmy  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(135)

我正在尝试使用KeyPath方法删除Firestore文档中的字段。
换句话说,我将请求主体转换为keyPath字符串。
示例,转换以下请求正文:

{
    "preferences": {
        "settings":{
            "v1.4.3": [
                "apple"
            ]
        }
    }
}

进入密钥路径:"preferences.settings.v1.4.3"
然后使用此keyPath通过以下方法删除路径

await userRef.update({
          "preferences.settings.v1.4.3": admin.firestore.FieldValue.delete(),
          lastUpdated: timestamp,
      });

如果keyPath字符串中不包含点,则可以正常工作,但如果包含点,则假定v1是一个包含键为4的字段的对象。
我也尝试使用set函数删除该字段(请参见下面的示例),但似乎不起作用

await userRef.set(
          {
              {
               "preferences": {
               "settings":{
               "v1.4.3": null
              }
            }
          },
              lastUpdated: timestamp,
          },
          { merge: true }
       );

请问如何解决这个问题。

qvtsj1bj

qvtsj1bj1#

update操作将点(.)解释为存在子场的指示。
写入名称中有文字点的字段的选项包括:

  • 使用set/setDoc,它不会将点解释为分隔符。如果要更新文档的子集,请传递{ merge: true},如此处的第二个代码示例所示。
  • 使用FieldPath object作为字段名称,而不只是字符串值。

相关问题