Firestore 更新文档而不跳过 Flutter 中的值

Firestore update document without skipping values in Flutter

目前我有一个包含用户列表的集合

在我的管理应用程序中,我有一个按钮,可让我根据我设置的当前值更新用户文档,这是通过此功能完成的:

onPressed: () async {
  var querySnapshots = await collection
      .where('current_pick', isEqualTo: _currentValue)
      .get();
  for (var doc in querySnapshots.docs) {
    await doc.reference.update({
      'current_streak': FieldValue.increment(1),
      'current_score': FieldValue.increment(1),
      'rank_up': true,
    });
  }
},

该函数有效,但它会一个一个地更新所有值,目前这很好,但随着用户数量的增加不太确定

我注意到,它很少会跳过对某些用户的三个值中的一个进行更新,我想知道是否有不同的方法可以在不失败的情况下更新值?

听起来您可能想要使用 batched write,它允许您以原子方式写入多个文档。

你的代码看起来像这样:

// Get a new write batch
final batch = db.batch();

// Put the updates into the batch
for (var doc in querySnapshots.docs) {
  batch.update(doc.reference, {
    'current_streak': FieldValue.increment(1),
    'current_score': FieldValue.increment(1),
    'rank_up': true,
  });
}

// Commit the batch
batch.commit().then((_) {

请注意,一次批量写入最多可包含 500 个操作,因此如果您要更新的文档超过 500 个,则必须将其拆分为多个批量写入。