Flutter Firestore批量更新多文档报错求助
解决Firestore Batch批量更新报错问题
问题根源
你把await batch.commit()写在了for循环内部,导致第一次循环就提交了batch。后续循环再调用batch.update()时,batch已经处于已提交状态,因此触发Bad state: This batch has already been committed and can no longer be changed错误,同时只有第一个文档能完成更新。
修正后的代码
InkWell( onTap: () async { final batch = FirebaseFirestore.instance.batch(); var pushNotifications = await FirebaseFirestore.instance .collection('collection name') .where(first filter) // 替换为你的实际过滤条件 .where(second filter) // 替换为你的实际过滤条件 .get(); print(pushNotifications.docs.length); // 先循环给batch添加所有更新操作 for (var postDoc in pushNotifications.docs) { batch.update(postDoc.reference, { "user_refs": usersInchallenge }); } // 所有操作添加完成后,一次性提交batch await batch.commit(); }, )
关键注意点
- Firestore的batch机制是先收集所有操作,最后一次性提交,不能在循环内重复提交
- 确保
usersInchallenge的格式符合Firestore对应字段的要求(比如是数组、合法的引用集合等) - Firestore单个batch最多支持500个操作,如果查询到的文档数量超过500,需要拆分多个batch分批处理
内容的提问来源于stack exchange,提问作者Dennis Ashford
相关产品推荐
相关产品推荐

