Can Firestore Update Multiple Documents Matching A Condition, Using One Query?


Answer :

Updating a document in Cloud Firestore requires knowings its ID. Cloud Firestore does not support the equivalent of SQL's update queries.

You will always have to do this in two steps:

  1. Run a query with your conditions to determine the document IDs
  2. Update the documents with individual updates, or with one or more batched writes.

Note that you only need the document ID from step 1. So you could run a query that only returns the IDs. This is not possible in the client-side SDKs, but can be done through the REST API and Admin SDKs as shown here: How to get a list of document IDs in a collection Cloud Firestore?


Frank's answer is actually a great one and does solve the issue.

But for those in a hurry maybe this snippet might help you:

const updateAllFromCollection = async (collectionName) => {     const firebase = require('firebase-admin')      const collection = firebase.firestore().collection(collectionName)      const newDocumentBody = {         message: 'hello world'     }      collection.where('message', '==', 'goodbye world').get().then(response => {         let batch = firebase.firestore().batch()         response.docs.forEach((doc) => {             const docRef = firebase.firestore().collection(collectionName).doc(doc.id)             batch.update(docRef, newDocumentBody)         })         batch.commit().then(() => {             console.log(`updated all documents inside ${collectionName}`)         })     }) } 

Just change what's inside the where function that queries the data and the newDocumentBody which is what's getting changed on every document.

Also don't forget to call the function with the collection's name.


The simplest approach is this

const ORDER_ITEMS = firebase.firestore().collection('OrderItems')   ORDER_ITEMS.where('order', '==', 2)     .get()     .then(snapshots => {       if (snapshots.size > 0) {         snapshots.forEach(orderItem => {           ORDER_ITEMS.doc(orderItem.id).update({ status: 1 })         })       }     }) 

Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable