从Web应用程序从Firestore删除字段时出错。 “不支持的字段值:自定义DeleteFieldValueImpl对象”

时间:2019-06-08 22:12:38

标签: angular firebase google-cloud-firestore

在尝试从Web应用程序中删除Firebase中的文档字段时,收到错误“ ERROR FirebaseError:函数DocumentReference.update()用无效数据调用。不支持的字段值:自定义DeleteFieldValueImpl对象(位于字段t1中)”。 / p>

出于测试目的,我创建了一个测试集合/文档“ / test / ZJ6UMPjc7DEQdKKphTxJ”

{
  "t1": "test",
  "t2": "test2"
}

并运行应删除“ t1”字段的代码。

this.fStore.doc('/test/ZJ6UMPjc7DEQdKKphTxJ').update({
        "t1": firebase.firestore.FieldValue.delete()
      });

但是,当我在我的角度应用程序中运行代码时,出现上述错误。该错误似乎是因为Web SDK无法写入对象。但是“ https://firebase.google.com/docs/firestore/manage-data/delete-data”上的所有文档都说这是从Web应用程序获取的正确方法。

我尝试更新所有库,但仍然没有成功。我目前的依赖项是

"@angular/fire": "5.2.1",
"firebase": "6.1.1",
"firebaseui": "4.0.0",
"firebaseui-angular": "3.4.2",

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我发现了问题。如果其他人尝试将所有Firebase逻辑包装到共享库中,我将在此处保留。

在我的应用程序中,我的前端和后端都触摸Firestore。为了简化维护,我将所有Firestore访问都拉到了自己的库中,该库从应用程序(前端或后端)接收Firestore对象的实例。简而言之,我的前端或后端创建并配置了一个Firestore实例,然后将该对象传递给我的共享库。现在,我只需要在1个地方编辑firestore路径和逻辑即可。

问题出在删除并让我的共享库导入firebase并使用firebase.firestore.FieldValue.delete()实例而引起。 Firestore的编写方式,我的应用程序可以处理我应用程序中的FieldValue.delete()。但是,如果它收到从我的共享库导入的FieldValue.delete(),将会呕吐。即使版本相同,Javascript“ instanceOf()”也表示来自一个共享库的FieldValue与应用程序实例不同。