如何使用flutter更新firestore中所有文档的单个字段?

Posted

技术标签:

【中文标题】如何使用flutter更新firestore中所有文档的单个字段?【英文标题】:How to update a single field of all documents in firestore using flutter? 【发布时间】:2020-11-28 23:26:10 【问题描述】:

我在数据库中有 100 个用户文档,我必须将所有文档中的一个字段更新为 0。我们该怎么做?

【问题讨论】:

【参考方案1】:

Firestore 不提供类似 SQL 的“update where”命令来一次更新所有内容,因此您必须:

    查询要更新的文档 迭代每个DocumentSnapshot 并使用reference property 获取其DocumentReference 对象 对于每个文档,update 具有新值的字段

【讨论】:

【参考方案2】:

正如@Doug 所说,没有直接的方法,您必须查询数据,从QueryDocumentSnapshot 获取DocumentReference 并在其上调用update

var collection = FirebaseFirestore.instance.collection('collection');
var querySnapshots = await collection.get();
for (var doc in querySnapshots.docs) 
  await doc.reference.update(
    'single_field': 'newValue',
  );

【讨论】:

为我工作。谢谢:)【参考方案3】:

尝试执行以下操作

    查询要更新的文档 遍历每个DocumentSnapshot 并使用引用属性获取其DocumentReference 对象,并为每个文档更新字段的新值
    void updateNotificationCount() async 
        FirebaseUser _currentUser = await FirebaseAuth.instance.currentUser();
        String authid = _currentUser.uid;
        var snapshots =
            activityFeedRef.document(authid).collection('feedItems').snapshots();
        try 
          await snapshots.forEach((snapshot) async 
            List<DocumentSnapshot> documents = snapshot.documents;
    
            for (var document in documents) 
              await document.reference.updateData(<String, dynamic>
                'seen': true,
              );
            
          );
         catch (e) 
          print(e.toString());
        
      

上面的代码只是在用户点击通知托盘时立即将所有未读通知从 false 更新为 true

【讨论】:

以上是关于如何使用flutter更新firestore中所有文档的单个字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter的firestore中使用uid更新用户数据

Flutter:更新列表中的特定索引(Firestore)

如何使用 Flutter 在 Firestore 中删除集合中的所有文档

如何在 Firebase + Firestore + Flutter 中使用 StreamBuilder 将所有子集合数据获取到 Widget

Flutter & Firebase - FirebaseFirestoreException:如果我按照以下方式制定了 Firebase 规则,如何获得使用 Firestore 中所有数据的

如何使用 Firestore 在 Flutter 中搜索文本