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 个,则必须将其拆分为多个批量写入。
目前我有一个包含用户列表的集合
在我的管理应用程序中,我有一个按钮,可让我根据我设置的当前值更新用户文档,这是通过此功能完成的:
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 个,则必须将其拆分为多个批量写入。