Is it possible to store multiple documents in Firestore with only one request? With this loop it's possible but this would cause one save operation per item in the list.
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) }
Firestore doesn't have the ability to bulk update documents without knowing their IDs. You will have to somehow know the document ID of each document to update (perform a query, or do batches of queries), and update each one individually.
Cloud Firestore does not support the equivalent of SQL's update queries.
// Atomically remove a region from the "regions" array field. # Atomically add a new region to the 'regions' array field. # // Atomically remove a region from the 'regions' array field. # Atomically add a new region to the 'regions' array field.
From Firebase documentation :
You can also execute multiple operations as a single batch, with any combination of the set(), update(), or delete() methods. You can batch writes across multiple documents, and all operations in the batch complete atomically.
// 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 multiple write operations
Hope it helps..
Update some properties on all documents in a collection:
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)) }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With