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.

Recuperando subcolección de Firebase

Estoy tratando de recuperar una subcolección de la base de datos de Firestore utilizando Angular.
Tengo una colección ‘Company’ que contiene los campos ‘Name’ y ‘Id’ y una subcolección ‘CustomerList’ que contiene los campos ‘Name’ y ‘Id’.

Para recuperar la colección Company tengo el siguiente código:

private companyCollection: AngularFirestoreCollection<company>;
getCompany() {
  return this.company = 
    this.companyCollection.snapshotChanges().pipe(
      map(changes => {
        return changes.map(a => {
          const data = a.payload.doc.data() as Company;
          return data;
        });

Mi pregunta es cómo recuperar la subcolección ‘CustomerList’ y añadirla al objeto ‘Company’.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para recuperar la subcolección ‘CustomerList’ de la base de datos de Firestore y agregarla al objeto ‘Company’, puedes modificar el código existente de la siguiente manera:

    1. Primero, agrega una nueva propiedad a la clase ‘Company’ para almacenar la subcolección ‘CustomerList’. Por ejemplo:
    export class Company {
      id: string;
      name: string;
      customerList: any[]; // Agrega esta propiedad
    }
    
    1. A continuación, modifica el método ‘getCompany()’ para recuperar la subcolección ‘CustomerList’ y agregarla al objeto ‘Company’. Aquí hay un código de ejemplo:
    getCompany() {
      return this.companyCollection.snapshotChanges().pipe(
        map(companyChanges => {
          return companyChanges.map(companyDoc => {
            const companyData = companyDoc.payload.doc.data() as Company;
            const companyId = companyDoc.payload.doc.id;
    
            // Obtén la subcolección 'CustomerList'
            this.afs.collection('Company').doc(companyId)
              .collection('CustomerList').snapshotChanges()
              .subscribe(customerListChanges => {
                const customerList = [];
                customerListChanges.forEach(customerListDoc => {
                  const customerData = customerListDoc.payload.doc.data();
                  const customerId = customerListDoc.payload.doc.id;
                  const customer = {
                    id: customerId,
                    ...customerData
                  };
                  customerList.push(customer);
                });
                // Agrega 'CustomerList' al objeto de datos de 'Company'
                companyData.customerList = customerList;
              });
    
            return {
              id: companyId,
              ...companyData
            };
          });
        })
      );
    }
    

    Aquí, primero recuperamos la colección ‘Company’ y para cada documento, obtenemos la subcolección ‘CustomerList’ utilizando el ID de la empresa. Luego, iteramos a través de los documentos de ‘CustomerList’ y los agregamos a un array. Finalmente, agregamos este array al objeto de datos de ‘Company’ y lo devolvemos. El observable resultante emitirá un array de objetos ‘Company’, cada uno con sus datos de subcolección ‘CustomerList’.

Comments are closed.