【问题标题】:How to append an array into an array field in firestore?如何将数组附加到firestore中的数组字段中?
【发布时间】:2020-10-10 17:50:03
【问题描述】:

问题

我有一个名为 Users 的集合,其中包含一个名为 friendEmails 的字段,这是一个包含字符串的数组。

我有一个带有friendEmails = {joe@gmail.com, dan@gmail.com} 的文档,我想将newEmails = {mat@gmail.com, sharon@gmail.com} 附加到它。

问题

我知道的唯一选择是:

  1. 先读取friendEmails数组,然后将它和newEmails的并集添加到文档中。

  2. 迭代newEmails 的元素(让我们每次迭代都在做: myCurrentDocumentReference.update(FieldValue.arrayUnion, singleStringElement);
    (因为FieldValue.arrayUnion 只允许我传递逗号分隔的元素,而我只有一个元素数组)。

这两个选项不好,因为第一个需要不必要的读取操作(不必要,因为 FireStore 似乎“知道”如何将项目附加到数组),第二个需要很多写入操作。

我正在寻找的解决方案

我希望 Firestore 可以让我选择附加整个数组,而不仅仅是单个元素。

类似这样的:

ArrayList<String> newEmails = Arrays.asList("mat@gmail.com", "sharon@gmail.com");

void appendNewArray() {
    FirebaseFirestore firestore = FirebaseFirestore.getInstance();
    firestore.collection("Users").document("userID").update("friendEmails", FieldValue.arrayUnion(newEmails));
}

我错过了什么吗?这不是一个明智的操作吗?

如果没有所有不必要的读/写操作,我还能如何执行此操作?

谢谢!

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

    您可以像这样使用FieldValue.arrayUnion() 作为字段更新的值向数组字段添加多个项目:

    docRef.update("friendEmails", FieldValue.arrayUnion(email1, email2));
    

    如需convert an ArrayList to an array for use with varargs arguments:

    docRef.update("friendEmails", FieldValue.arrayUnion(
        newEmails.toArray(new String[newEmails.size()])
    ));
    

    【讨论】:

    • 我的问题是“解包”我现有的newEmails 数组以作为arrayUnion 的参数传递。我该怎么办?
    • 请编辑问题以显示您正在使用的特定代码,并澄清有关该代码未按您期望的方式运行的问题。
    猜你喜欢
    • 2018-06-13
    • 2020-02-25
    • 2018-06-22
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多