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.

Firestore cómo extraer una subcolección de colecciones.

Tengo una estructura de datos como esta.

imagen

Ahora quiero extraer de la colección de productos. Ya puedo obtener sus campos, pero no sé cómo extraer subcolecciones. Aquí está mi código para extraer los campos de la colección de productos.

useEffect(() => {
    async function fetchData() {
      const conditional_fetch = query(
        collection(db, "products"),
        where("active", "==", true)
      );
      const querySnapshot = await getDocs(conditional_fetch);
      const products = [];
      querySnapshot.forEach((doc) => {
        products[doc.id] = doc.data();
      });
      setProducts(products);
    }
    fetchData();
}

Espero que esto le sea de ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para extraer subcolecciones, deberá utilizar el método de colección de Firestore para recuperar los datos de la subcolección. Aquí hay un código de ejemplo sobre cómo extraer subcolecciones:

    useEffect(() => {
      async function fetchData() {
        const conditional_fetch = query(
          collection(db, "products"),
          where("active", "==", true)
        );
        const querySnapshot = await getDocs(conditional_fetch);
        const products = [];
        querySnapshot.forEach(async (doc) => {
          const productData = doc.data();
          const subcollectionRef = collection(db, "products", doc.id, "images");
          const subcollectionSnapshot = await getDocs(subcollectionRef);
          const images = [];
          subcollectionSnapshot.forEach(subdoc => {
            images.push(subdoc.data());
          });
          productData.images = images;
          products.push(productData);
        });
        setProducts(products);
      }
      fetchData();
    });
    

    En este ejemplo, primero recuperamos los datos de la colección “products” basados en nuestra consulta condicional. Una vez que tenemos el querySnapshot, recorremos cada documento utilizando la función forEach. Dentro del bucle, primero recuperamos los datos del producto utilizando el método doc.data().

    A continuación, creamos una variable subcollectionRef utilizando el método de colección en nuestra instancia db, pasando la ruta a nuestra subcolección. En este caso, nuestra subcolección se encuentra en “products/[docId]/images”.

    Luego, utilizamos el método getDocs en subcollectionRef para recuperar los datos de la subcolección como un querySnapshot. Creamos una matriz vacía de imágenes para almacenar los datos de la subcolección.

    Después, recorremos cada subdocumento utilizando el método forEach en subcollectionSnapshot. Dentro del bucle, agregamos cada dato del subdocumento a nuestra matriz de imágenes.

    Finalmente, agregamos la matriz de imágenes a nuestro objeto de datos del producto y agregamos el objeto de datos del producto a nuestra matriz de productos. Una vez que hemos recorrido todos los documentos, configuramos el estado de nuestros productos con la matriz completa de productos.

    Nota: Este es solo un ejemplo de código y es posible que deba modificarse para que se ajuste a su caso de uso específico.

Comments are closed.