Firestore更新列表重复值时FieldValue.increment增量未生效问题
Firestore重复值增量更新未生效问题排查
问题根因
- 问题并非出在Firestore的增量逻辑,而是你的Dart Map生成逻辑存在疏漏:Map结构的键具备唯一性,使用
{for (var item in list) '$item': FieldValue.increment(1)}生成更新参数时,遍历到第二个重复的3时,会直接覆盖key为'3'对应的旧值,最终生成的更新Map中'3'对应的仅为单次FieldValue.increment(1)操作,因此Firestore仅会执行一次对3字段的增量。
修复方案
先统计列表中每个元素的出现次数,再将次数作为增量值传入FieldValue.increment即可,参考代码如下:
void testing() { var list = [1, 2, 3, 3, 8]; // 统计各元素出现次数 Map<String, int> countMap = {}; for (var item in list) { String key = '$item'; countMap[key] = (countMap[key] ?? 0) + 1; } // 生成符合预期的更新参数 var up = countMap.map((key, count) => MapEntry(key, FieldValue.increment(count))); testdb.doc('test').update(up); }
补充说明
FieldValue.increment本身支持传入任意正负数作为增量步长,无需为同一个字段生成多次增量操作,先统计次数再单次更新的方案不会产生额外的请求开销,是性能最优的实现方式。
内容的提问来源于stack exchange,提问作者user16648824
相关产品推荐
相关产品推荐

