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 中的数组?
如何将状态传递给 firebaseConnect 中的 doc 属性