【问题标题】:Firestore - Pass Array To arrayUnion()Firestore - 将数组传递给 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)
});

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案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";它本质上是多个参数。您必须单独传递值,或者使用传播,然后将其作为数组组合在一起接收。
    猜你喜欢
    • 2021-06-15
    • 2020-05-25
    • 1970-01-01
    • 2023-03-24
    • 2020-06-25
    • 2019-09-05
    • 2020-08-05
    • 2020-07-28
    • 2014-01-14
    相关资源
    最近更新 更多