firebase - transaction - Cómo crear/actualizar varios documentos a la vez en Firestore
firestore update (2)
¿Es posible almacenar varios documentos en Firestore con solo una solicitud? Con este bucle es posible, pero esto causaría una operación de guardado por elemento en la lista.
for (counter in counters) {
val counterDocRef = FirebaseFirestore.getInstance()
.document("users/${auth.currentUser!!.uid}/lists/${listId}/counters/${counter.id}")
val counterData = mapOf(
"name" to counter.name,
"score" to counter.score,
)
counterDocRef.set(counterData)
}
Actualizar algunas propiedades en todos los documentos en una colección:
resetScore(): Promise<void> {
return this.usersCollectionRef.ref.get().then(resp => {
console.log(resp.docs)
let batch = this.afs.firestore.batch();
resp.docs.forEach(userDocRef => {
batch.update(userDocRef.ref, {''score'': 0, ''leadsWithSalesWin'': 0, ''leadsReported'': 0});
})
batch.commit().catch(err => console.error(err));
}).catch(error => console.error(error))
}
De la documentación de Firebase:
También puede ejecutar varias operaciones como un solo lote, con cualquier combinación de los métodos set (), update () o delete (). Puede realizar escrituras por lotes en varios documentos y todas las operaciones en el lote se completan de forma atómica.
// Get a new write batch
WriteBatch batch = db.batch();
// Set the value of ''NYC''
DocumentReference nycRef = db.collection("cities").document("NYC");
batch.set(nycRef, new City());
// Update the population of ''SF''
DocumentReference sfRef = db.collection("cities").document("SF");
batch.update(sfRef, "population", 1000000L);
// Delete the city ''LA''
DocumentReference laRef = db.collection("cities").document("LA");
batch.delete(laRef);
// Commit the batch
batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// ...
}
});
Firestore operaciones de escritura múltiple
Espero eso ayude..