具有Flutter的FieldValue arrayUnion和Cloud FireStore

时间:2018-09-14 13:11:38

标签: firebase dart flutter google-cloud-firestore

我有这样的云火存储对象

"TestCollection" : ["Test1","Test"]

现在我想使用FieldValue.arrayUnion更新此数组 因为如果元素相同,那么我不想做任何事情,但是如果不是,那么我想添加元素

docRef.updateData({"TestCollection":FieldValue.arrayUnion(["test"])})

但是此语句给出了错误,例如对象不能具有嵌套数组

任何人都可以请帮助或提供相同的示例来查找语法吗?

5 个答案:

答案 0 :(得分:3)

我找到了解决方案。 试试这个:

number

如果仍然无法正常运行,请尝试更新Firebase。

首先打开一个提取到您的flutter项目的终端,然后:

 Firestore.instance
.collection('YourCollection')
.document('YourDocument')
.updateData({'array':FieldValue.arrayUnion(['data1','data2','data3'])});

此解决方案仅适用于mac用户。

答案 1 :(得分:2)

如果有对象列表,则为另一种方式

Future<void> updateUserNewGroup(List<Group> data , String id) {

    List<Map> list=new List();

    if(data !=null && data.isNotEmpty){
        data.forEach((grp){
            list.add(grp.toJson());
        });
    }


    return ref.document(id).updateData({"groups": FieldValue.arrayUnion(list)}) ;
}

答案 2 :(得分:2)

2021 年 FlutterFire 新更新

在最新的 FlutterFire 更新中,API 进行了大量更新,但幸运的是,这个问题并没有太大变化。我说的是 Firebase for Flutter 的最新插件,特别是与新的 firebase_core ^0.7.0 兼容的每个插件。 所以代码看起来很相似:

FirebaseFirestore.instance
.collection("YourCollection")
.doc("YourDocument")
.update({
      "anArray": FieldValue.arrayUnion(["data", "to", "append"])
    });

答案 3 :(得分:1)

按照现有答案进行操作,如果该字段不存在,则可以使用“设置并合并”。这样可以避免检查该字段是否存在。

Firestore.instance
  .collection('YourCollection')
  .document('YourDocument')
  .setData({
    'array':FieldValue.arrayUnion(['data1','data2','data3'])
  }, merge: true);

答案 4 :(得分:1)

这是我使用的代码,它就像一个魅力!

                _firestore
                .collection('x')
                .document('xxxxxxxxxx')
                .updateData({
              'comments': FieldValue.arrayUnion([
       {'comment': "comment goes here", 'sender': "xxxxxxxx@gmail.com"}
              ])
            });