使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore

Posted

技术标签:

【中文标题】使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore【英文标题】:FieldValue arrayUnion and Cloud FireStore with Flutter 【发布时间】:2019-02-19 07:31:14 【问题描述】:

我有这样的云火存储对象

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

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

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

但是这个语句给出了对象不能有嵌套数组的错误

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

【问题讨论】:

我也有同样的问题... 【参考方案1】:

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"])
    );

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

跟进现有答案,如果该字段不存在,您可以使用集合和合并。这样可以避免您检查该字段是否存在。

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

【讨论】:

【参考方案4】:

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

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)) ;

【讨论】:

【参考方案5】:

我找到了解决办法。 试试这个:

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

如果仍然无法正常工作,请尝试更新您的 Firebase。

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

cd ios
pod update Firebase

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

【讨论】:

以上是关于使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中 Cloud Firestore 的 FieldValue.increment

使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore

jQuery form插件的使用--使用 fieldValue 方法校验表单

如何使用flutter-web将时间戳存储在firestore中

Flutter 和 Firebase:从 Firebase 中的数组中删除项目(地图)

Flutter Firestore:通过参数更新对象数组