Flutter中使用Firebase能否批量更新多个文档的字段值?
问题原因
你编写的代码仅修改了从Firestore查询得到的本地内存中的数据副本,没有调用Firestore的服务端更新接口,因此修改不会同步到云数据库,字段值自然不会更新。
修复实现
基础版本(逐个更新)
直接在遍历文档时调用对应文档引用的update方法即可:
FirebaseFirestore.instance .collection('tbl_Messages') .doc("e5df2a37-816b-4b48-830f-d6387cc4d043") .collection('e5df2a37-816b-4b48-830f-d6387cc4d043') .orderBy('createdAt', descending: true) .get() .then((QuerySnapshot documentSnapshot) async { for (var element in documentSnapshot.docs) { // 调用文档引用的update方法将修改同步到服务端 await element.reference.update({'thumb': 'hello'}); } });
优化版本(批量写入,性能更高)
如果符合条件的文档数量较多,推荐使用Firestore的WriteBatch批量写入能力,一次请求即可提交最多500条修改,减少网络开销:
FirebaseFirestore.instance .collection('tbl_Messages') .doc("e5df2a37-816b-4b48-830f-d6387cc4d043") .collection('e5df2a37-816b-4b48-830f-d6387cc4d043') .orderBy('createdAt', descending: true) .get() .then((QuerySnapshot documentSnapshot) async { // 初始化批量写入实例 WriteBatch batch = FirebaseFirestore.instance.batch(); for (var element in documentSnapshot.docs) { // 把更新操作加入批量任务 batch.update(element.reference, {'thumb': 'hello'}); } // 提交所有批量操作 await batch.commit(); });
注意:单个WriteBatch最多支持500条操作,若符合条件的文档数超过500,需要自行拆分多批执行。


内容的提问来源于stack exchange,提问作者Jemish Patel
相关产品推荐
相关产品推荐

