Firestore - 将数组传递给 arrayUnion()

Posted

技术标签:

【中文标题】Firestore - 将数组传递给 arrayUnion()【英文标题】:Firestore - Pass Array To arrayUnion() 【发布时间】:2019-04-14 14:09:19 【问题描述】:

如何将数组传递给 firebase firestore arrayUnion() function?

当我尝试传递数组时出现此错误。

错误

Error: 3 INVALID_ARGUMENT: Cannot convert an array value in an array value.

示例

let myArray = ["1", "2", "3"];

docRef.update(
    test: firebase.firestore.FieldValue.arrayUnion(myArray)
);

【问题讨论】:

【参考方案1】:

我最终找到了在另一个stack overflow answer 中使用Function.prototype.apply() 的答案。

Function.prototype.apply() 示例

let myArray = ["1", "2", "3"];

docRef.update(
    test: firebase.firestore.FieldValue.arrayUnion.apply(this, myArray)
);

ECMAScript 6 示例

使用spread argument

let myArray = ["1", "2", "3"];

docRef.update(
    test: firebase.firestore.FieldValue.arrayUnion(...myArray)
);

当使用上述任一方法传递数组时,Firestore 只会向 Firestore 数组中不存在的新数组元素添加。

例如运行上面,然后运行下面

let myArray = ["2", "3", "5", "7"];

docRef.update(
    test: firebase.firestore.FieldValue.arrayUnion(...myArray)
);

只会在 Firestore 中的数组中添加“5”和 7。这也适用于对象数组。

【讨论】:

谢谢你。文档仅显示添加单个元素的示例,Firebase 团队应考虑添加此元素。 我想任何有能力的程序员都应该能够弄清楚 spread 应该这样做,但是一个带有数组的示例似乎比单个字符串更常见。同意 Firebase 团队应添加到文档中。 谢谢!我很困惑,特别是因为documentation 明确列出[] 作为arrayUnion 的参数。 任何 kotlin 语法? @TimErickson - 文档说arrayUnion(...elements: any []) : FieldValue,这是正确的。这是"Rest parameter";它本质上是多个参数。您必须单独传递值,或者使用传播,然后将其作为数组组合在一起接收。

以上是关于Firestore - 将数组传递给 arrayUnion()的主要内容,如果未能解决你的问题,请参考以下文章

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

为啥我不能将从 Firestore 获取的值分配给 Swift 中的数组?

Firestore:如何从数组中检索数据并将其传递到表中?

如何将状态传递给 firebaseConnect 中的 doc 属性

如何在flutter中将数据从firestore传递给Typeahead

使用Arrayu multisort对数据重新排序