可以在 arrayUnion 方法中传递 Firestore DocumentReference 吗?

Posted

技术标签:

【中文标题】可以在 arrayUnion 方法中传递 Firestore DocumentReference 吗?【英文标题】:Can a Firestore DocumentReference be passed in an arrayUnion method? 【发布时间】:2020-05-25 21:27:05 【问题描述】:

我正在尝试将 Firestore 文档引用添加到用户文档中的数组字段,以将引用保存为“收藏夹”。我可以从文档引用数组中读取,但不能使用 arrayUnion 更新数组或使用 arrayRemove 从数组中删除元素。

这是我添加对数组的引用的代码:

await userDocument.reference.updateData('favourites':FieldValue.arrayUnion([documentReference]));

并从数组中删除引用:

await userDocument.reference.updateData("favourites":FieldValue.arrayRemove([documentReference]));

问题在于出现如下错误:

Unhandled Exception: Invalid argument: Instance of 'DocumentReference'

据我了解,这意味着 arrayUnion/arrayRemove 方法不能接受 DocumentReference。

如果确实如此,有没有办法解决这个问题?以及为什么 Firebase 允许您在项目控制台中添加引用而不是通过代码?

【问题讨论】:

【参考方案1】:

您正在取消引用 documentReference,这是不可能的。

所以你会想要这样做:

FieldValue.arrayUnion(documentReference)

代替:

FieldValue.arrayUnion([documentReference])

【讨论】:

我已经尝试过了,但是它抛出了一个错误:“参数类型'DocumentReference'不能分配给参数类型'List'。”【参考方案2】:

这是cloud_firestore: 0.13.0 to 0.13.1+1 中的一个错误,正如我在此处的错误报告中所述:GitHub: DocumentReference doesn't convert to FieldValue。

目前可以通过回复cloud_firestore: 0.12.11来解决

【讨论】:

以上是关于可以在 arrayUnion 方法中传递 Firestore DocumentReference 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firestore 中正确使用 arrayUnion?

Swift & Firestore - 使用 .arrayUnion() 将字典附加到嵌套数组

尝试更新firestore中的数组时出现“TypeError:无法读取未定义的属性'arrayUnion'”

使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore

Integrate-And-Fire Models(转)

OwinCommunicationListener 中托管的 Async Web Api 中的 Fire and Forget 方法