3 回答
TA贡献1811条经验 获得超4个赞
Raj 的方法会起作用,但可能会导致进行大量写入。正如 Doug 所提到的,您可能喜欢批量写入。
void getData() {
mFirebaseFirestore.collection("Events").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<String> list = new ArrayList<>();
for (QueryDocumentSnapshot document : task.getResult()) {
list.add(document.getId());
}
Log.d(TAG, list.toString());
updateData(list); // *** new ***
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
}
void updateData(ArrayList list) {
// Get a new write batch
WriteBatch batch = db.batch();
// Iterate through the list
for (int k = 0; k < list.size(); k++) {
// Update each list item
DocumentReference ref = db.collection("Events").document(list.get(k));
batch.update(ref, "field_you_want_to_update", "new_value");
}
// Commit the batch
batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// Yay its all done in one go!
}
});
}
文档:https : //firebase.google.com/docs/firestore/manage-data/transactions#batched-writes
TA贡献2021条经验 获得超8个赞
没有一个操作可以根据某些搜索条件更新多个文档。您必须像现在一样迭代查询结果,然后单独更新每个文档。您也可以使用事务或批量写入以原子方式执行更新,但这不会让您阻止迭代初始查询结果中的所有文档。
添加回答
举报