• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

319
Vistas
Cómo obtener datos de un documento en una colección principal en función de una consulta en una subcolección

Hola chicos, trato de obtener datos de un documento que tiene un nombre de valor de campo y una subcolección llamada kurzwaffensub pero para mi proyecto necesito hacer una collectionGroup query y luego necesito el Name value de cada documento que coincida con la consulta de la subcolección. .

Mi estructura actual

Así que déjame explicarte. Primero necesito hacer una collectionGroup query de los documents de la subcolección basada en sus dos parámetros kurzHersteller y kurzModell que marqué en verde en la imagen. Después de eso, obtengo todos los Documents de cada Subcollection que coinciden con la consulta.

Y como puede ver, el blue document uid es el mismo uid que en el valor de campo de cada documento de la subcolección.

Y mi objetivo es obtener el valor de campo marcado fieldvalue de los documents de la colección principal después de la consulta grupal de la subcollection .

Pero solo quiero recibir los Nombres de los documents que coincidan con los requisitos de la consulta.

Entonces, en este caso, necesito el nombre Felix Sturms porque tiene un document en su subcollection marcado en amarillo que coincide con la búsqueda de kurzHersteller : Andere y kurzKaliber : Andere

No sé si esto es posible o si necesito estructurar mis datos de otra manera. Soy un principiante con firebase firestore, así que tal vez puedas ayudarme.

 const [test, setTest] = useState([]); const HEuKA = query(kurzRef,where("kurzHersteller", "==", `${kurzHersteller}` ), where('kurzKaliber' , '==', `${kurzKaliber}`)); const handleClick = async () => { ...blablabla ... } else if (kurzHersteller && kurzKaliber) { const modell = await getDocs(HeuKa); modell.forEach((doc) => { // doc.data() is never undefined for query doc snapshots setTest(doc.id, " => ", doc.data()); }); } else { alert('Bitte etwas eingeben')} }

Así que esa es la primera operación después de recibir la matriz de los documentos de la subcolección que coinciden con la consulta, necesito otra operación para obtener los documentos correspondientes de la colección principal que contienen la información sobre el Nombre de los usuarios que tienen un documento en el subcolección que coincide con los valores kurzHersteller: Andere y kurzModell: Andere de este ejemplo.

almost 3 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Una vez que obtenga la QuerySnapshot de su consulta de grupo de colección, puede recorrer cada documento y luego acceder al documento principal usando la propiedad .parent presente en DocumentReference de cada documento. Intente ejecutar el siguiente código después de su primera consulta:

 const modell = await getDocs(HeuKa); const data = []; for (const doc of modell.docs) { const parentDoc = await getDoc(doc.ref.parent.parent); const { Name } = parentDoc.data(); data.push({ ...doc.data(), Name, }); }
almost 3 years ago · Juan Pablo Isaza Denunciar

0

Firestore lee/consulta documentos devueltos de una sola colección, o con consultas de grupos de colección de todas las colecciones con el mismo nombre. No hay forma en Firestore de incluir datos del documento principal en la misma lectura/consulta.

Las dos opciones que tienes son:

  1. Lea el documento principal para cualquier resultado que obtenga de la subcolección.
  2. Duplicar la información necesaria del documento principal en cada documento de la subcolección.

Si bien el n.° 1 es la opción más común para las personas que son nuevas en Firestore (y en las bases de datos NoSQL en general), a medida que tenga más experiencia con Firestore, a menudo se encontrará usando el n.° 2 con mayor frecuencia.

almost 3 years ago · Juan Pablo Isaza Denunciar

0

Creo que una forma más robusta, en la que no depende de la estructura, es obtener el documento del campo 'uid' que tiene en cada documento que obtiene de la consulta'. Aún mejor sería cambiar este campo para escribir "referencia", en cuyo caso puede hacerlo (asumiendo que crea un campo llamado referencia de cliente como reemplazo de uid):

 modell.forEach((doc) => { const customerDoc = await doc.data().customerReference.get(); const name = customerDoc.data().Name;
almost 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda