Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

190
Views
La obtención de documentos en una subcolección de una base de datos de almacenamiento en la nube no devuelve ningún dato

Estoy usando la base de datos de Cloud Firestore para almacenar documentos para el usuario dentro de una aplicación next.js, la ruta de recopilación es la siguiente

 collection "userDocs" └─ document "userEmail" └─ collection "docs" └─ document "documentObject"

Estaba usando el SDK de Firebase v9 y cambié a firebase v8 y sigo teniendo el mismo problema.

Este fragmento de código es donde agrego un nuevo documento a la base de datos que se realiza y se refleja correctamente en la consola de Firebase

 db.collection("userDocs").doc(session.user.email).collection("docs").add({ fileName: input, timestamp: firebase.firestore.FieldValue.serverTimestamp(), });

Al intentar obtener documentos de la base de datos, probé los siguientes enfoques:

1. Usar ganchos de base de fuego de reacción

 const [snapshot] = useCollectionOnce( db .collection("userDocs") .doc(session?.user.email) .collection("docs") .orderBy("timestamp", "desc") );

2. Usando la consulta de Firebase

 useEffect(() => { var query = db.collection("userDocs"); query.get().then((querySnapshot) => { querySnapshot.forEach((document) => { document.ref .collection("docs") .get() .then((querySnapshot) => { console.log(querySnapshot); }); }); }); });

Así es como traté de lograrlo usando firebase v9

 import { collection, query, orderBy, serverTimestamp, setDoc, doc, collectionGroup, onSnapshot, getDocs, } from "firebase/firestore"; useEffect(async () => { const docRef = query( collection(db, "UserDocs", session?.user.email, "Docs"), orderBy("timestamp", "desc") ); const docSnap = await getDocs(docRef); const allDocs = docSnap.forEach((doc) => { console.log(`Document ${doc.id} contains ${JSON.stringify(doc.data())}`); }); }, []);
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

El problema era que no estabas estructurando tus datos correctamente. Como se muestra en la documentación oficial de Firebase Elija una estructura de datos ,

cuando estructura sus datos en Cloud Firestore, tiene algunas opciones diferentes:

  • Documentos
  • Múltiples colecciones
  • Subcolecciones dentro de documentos

Considere las ventajas de cada opción en relación con su caso de uso

Por lo tanto, a partir del código que ha compartido en su respuesta, la estructura que está utilizando es Datos anidados en documentos .

Me perdí un poco en su primer enfoque, pero dado que finalmente lo hizo funcionar, el consejo es estructurar sus datos de acuerdo con lo que se indica en la documentación y lo que se ajusta a sus necesidades.

Ver también

  • https://firebase.google.com/docs/firestore
about 4 years ago · Juan Pablo Isaza Report

0

Me las arreglé para solucionar esto usando el siguiente enfoque:

1- Reestructuré mi base de datos para contener una colección de "docs" que contiene un objeto de documento que tiene los siguientes atributos {email, fileName, timestamp} en lugar de crear una subcolección.

Creé el siguiente método para obtener datos y mapearlos en una matriz de estado para poder representarlos

 const getDocuments = async () => { await db .collection("docs") .where("email", "==", session?.user.email) .orderBy("timestamp", "desc") .get() .then((res) => { setUserDocs(res.docs); }) .catch((error) => { console.log(error); }); };

Todavía no estoy muy seguro de por qué funcionó exactamente este intento en lugar de todas las demás pruebas, pero logré hacer que las cosas funcionaran hasta ahora, así que eso es lo más importante por el momento.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!