es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener todos los documentos de una colección: revisar cuáles tienen una subcolección y actualizar todos los documentos de dicha subcolección con los datos del documento padre.

En Firebase Admin, me gustaría ejecutar una función para solucionar un problema de modelo de datos.

Tengo una colección de documentos x.

Cada documento en x puede o no tener una subcolección de documentos y.

Me gustaría actualizar todos los documentos en y con los datos del documento padre x.

x1 {y1, y2, y3 …}
x2 {y1, y2, y3, y4 …}
x3 {null}
x4 {y1, y2 …}

Por ejemplo, el documento x1 actualizará sus 3 documentos y con los datos de x1.
Por ejemplo, el documento x3 actualizará sus 4 documentos y con los datos de x3.
Nada sucederá con x3, etc.

Básicamente, los documentos y se leen mucho más que los documentos x, por lo que no quiero llamar a x cada vez que necesite un pequeño fragmento de datos en y, solo quiero ejecutar un script que agregue ese fragmento a los y’s.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema del modelo de datos en Firebase Admin, puedes seguir estos pasos:

    1. Escribe una Cloud Function en Firebase Admin que recupere todos los documentos de la colección x y recorra cada uno de ellos.
    2. Para cada documento en x, verifica si tiene una subcolección y mediante una consulta para verificar la existencia de documentos en la subcolección.

      Si el documento no tiene una subcolección y, pasa al siguiente documento en x.

    3. Si el documento tiene una subcolección y, recupera todos los documentos en y y recorre cada uno de ellos.

    4. Para cada documento en y, actualízalo con datos del documento principal en x utilizando Firestore batch writes.

      Puedes utilizar la función update() con merge establecido en true para fusionar los datos de x en y.

      Por ejemplo, para actualizar el documento y1 en x1 con los datos de x1, puedes utilizar el siguiente código:

    const xDocRef = firestore.collection('x').doc('x1');
    const yDocRef = xDocRef.collection('y').doc('y1');
    
    const data = {
      // agregar los campos a actualizar de x1 a y1
      campo1: xData.campo1,
      campo2: xData.campo2,
      // ...etc.
    };
    
    const batch = firestore.batch();
    batch.update(yDocRef, data, {merge: true});
    
    await batch.commit();
    
    1. Finalmente, implementa la Cloud Function para ejecutar el script y solucionar el problema del modelo de datos.

    Nota: Asegúrate de probar la Cloud Function en un subconjunto de documentos antes de ejecutarla en todos los documentos para evitar cambios no deseados en los datos.

Comments are closed.