Saltar al contenido

¿Puede Firestore actualizar varios documentos que coincidan con una condición mediante una consulta?

Solución:

Actualizar un documento en Cloud Firestore requiere conocer su ID. Cloud Firestore no admite el equivalente de las consultas de actualización de SQL.

Siempre tendrás que hacer esto en dos pasos:

  1. Ejecute una consulta con sus condiciones para determinar los ID del documento.
  2. Actualice los documentos con actualizaciones individuales o con una o más escrituras por lotes.

Tenga en cuenta que solo necesita el ID del documento del paso 1. Por lo tanto, podría ejecutar una consulta que solo devuelva los ID. Esto no es posible en los SDK del lado del cliente, pero se puede hacer a través de la API REST y los SDK de administrador como se muestra aquí: ¿Cómo obtener una lista de ID de documentos en una colección de Cloud Firestore?

La respuesta de Frank es realmente excelente y resuelve el problema.

Pero para aquellos que tienen prisa, tal vez este fragmento podría ayudarlos:

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}`)
        })
    })
}

Solo cambia lo que hay dentro del where función que consulta los datos y la newDocumentBody que es lo que se cambia en cada documento.

Además, no olvide llamar a la función con el nombre de la colección.

El enfoque más simple es este

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 })
        })
      }
    })
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *