如何在Firestore中的现有阵列中添加或删除项目?

ujj*_*ali 2 dart flutter google-cloud-firestore

Firestore最近添加了新的新方法FieldValue.arrayUnion(value)和FieldValue.arrayRemove(value),但我在flutter cloud_firestore包中找不到实现。有什么办法可以达到这个结果?

Firestore addUpdate:https ://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array

Shy*_*hil 7

这是显示如何更新数组值的简单示例。我的文档有一个向上投票者数组,用于添加对该文档进行投票的用户ID。

配置Firestore,可将配置详细信息从google-services.json文件复制

   final FirebaseApp app = await FirebaseApp.configure(
    name: 'test',
    options: const FirebaseOptions(
      projectID: 'projid',
      googleAppID: 'appid',
      apiKey: 'api',
      databaseURL: 'your url',
    ),
  );
  final Firestore firestore = Firestore(app: app);

  await firestore.settings(timestampsInSnapshotsEnabled: true);
Run Code Online (Sandbox Code Playgroud)

使用交易更新代码

fireStore.runTransaction((Transaction tx) async {
            DocumentSnapshot snapshot =
                await tx.get(widget._document.reference);
            var doc = snapshot.data;
            if (doc['upvoters'].contains('12345')) {
              await tx.update(snapshot.reference, <String, dynamic>{
                'upvoters': FieldValue.arrayRemove(['12345'])
              });
            } else {
              await tx.update(snapshot.reference, <String, dynamic>{
                'upvoters': FieldValue.arrayUnion(['12345'])
              });
            }
          });
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你


Phu*_*eat 5

更新:现在似乎支持了!随着版本 0.8.0。

https://pub.dartlang.org/packages/cloud_firestore

然后使用 FieldValue.arrayUnion 和 FieldVale.arrayRemove。


目前好像没有办法。请关注以下两个github问题:

https://github.com/flutter/flutter/issues/21148 https://github.com/flutter/flutter/issues/20688