Firestore-将数组传递给arrayUnion()

Mat*_*out 3 javascript firebase google-cloud-firestore

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

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

错误

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)
});
Run Code Online (Sandbox Code Playgroud)

Mat*_*out 7

我最终在另一个堆栈溢出答案中找到了使用Function.prototype.apply()的答案

Function.prototype.apply()的示例

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

docRef.update({
    test: firebase.firestore.FieldValue.arrayUnion.apply(this, myArray)
});
Run Code Online (Sandbox Code Playgroud)

ECMAScript 6示例

使用传播参数

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

docRef.update({
    test: firebase.firestore.FieldValue.arrayUnion(...myArray)
});
Run Code Online (Sandbox Code Playgroud)

使用上述两种方法传递数组时,Firestore只会将新数组元素添加到Firestore数组中尚不存在的元素。

例如,运行上面的内容,然后运行以下内容

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

docRef.update({
    test: firebase.firestore.FieldValue.arrayUnion(...myArray)
});
Run Code Online (Sandbox Code Playgroud)

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

  • 这次真是万分感谢。文档仅显示添加单个元素的示例,Firebase团队应考虑添加此元素。 (3认同)
  • 谢谢!我很困惑,特别是因为[文档](https://firebase.google.com/docs/reference/js/firebase.firestore.FieldValue#static-array-union)明确列出了`[]`作为`的参数数组联盟`. (3认同)
  • 我想任何有能力的程序员都应该能够弄清楚扩展应该做到这一点,但是带有数组的示例似乎比单个字符串更常见。同意 Firebase 团队应添加到文档中。 (2认同)