Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

209
Vistas
Búsqueda dentro de la colección consulta de collectionGroup

Entonces encontré esta respuesta que permite limitar la consulta de collectionGroup a un documento específico: CollectionGroupQuery pero limita la búsqueda a subcolecciones en un documento en particular

Sin embargo, también quiero filtrar aún más los resultados en función de un campo específico usando where , que requiere un índice. La consulta funciona sin errores, pero siempre devuelve una instantánea vacía:

 const cityRef = firebase.firestore().doc('cities/cityId'); firebase.firestore().collectionGroup('attractions') .where('name', '>=', keywords), .where('name', '<=', keywords + '\uf8ff') .orderBy('name') .orderBy(firebase.firestore.FieldPath.documentId()) .startAt(cityRef.path), .endAt(cityRef.path + "\uf8ff") .get() .then((querySnapshot) => { console.log("Found " + querySnapshot.size + " docs"); querySnapshot.forEach((doc) => console.log("> " + doc.ref.path)) }) .catch((err) => { console.error("Failed to execute query", err); })
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

base de fuego aquí

Es casi seguro que el problema es que su consulta tiene comprobaciones de rango en dos campos diferentes ( name y ruta del documento), lo que no es posible en el modelo de consulta de Firestore. Como dice la documentación sobre las limitaciones de consulta :

En una consulta compuesta, las comparaciones de rango (<, <=, >, >=) y no igual (!=, no incluido) deben filtrarse en el mismo campo.

Sus cláusulas startAt y endAt son solo formas diferentes de escribir > y < en lo que respecta a esta limitación.

Para entender por qué el SDK te permite escribir esta consulta, pero no te da el resultado que deseas, tendremos que profundizar un poco más, así que... 👇


Lo que es posible es pasar todos los campos relevantes a startAt y endAt para que pueda determinar la división correcta en todos esos valores de campo.

Hacer eso también eliminaría la necesidad de tener el where , por lo que sería:

 firebase.firestore().collectionGroup('attractions') .orderBy('name') .orderBy(firebase.firestore.FieldPath.documentId()) .startAt(keywords, cityRef.path), .endAt(keywords + '\uf8ff', cityRef.path + "\uf8ff") .get() ...

Pero esta consulta ahora primero busca los documentos que comienzan con keywords y luego, si es necesario cityRef.path allí para eliminar la ambigüedad entre múltiples resultados.

Lo que quieres es el equivalente de esta consulta:

 const docId = firebase.firestore.FieldPath.documentId()l firebase.firestore().collectionGroup('attractions') .orderBy('name') .where('name', '>=', keywords), .where('name', '<=', keywords + '\uf8ff') .orderBy(firebase.firestore.FieldPath.documentId()) .where(docId, '>=', cityRef.path), .where(docId, '<=', cityRef.path + '\uf8ff')

Ahora queda inmediatamente claro por qué esto no es posible, porque tenemos condiciones de rango en dos campos.

He estado tratando de hacer que funcione en este jsbin ( https://jsbin.com/yiyifin/edit?js,console ), hasta ahora sin éxito, pero volveré a publicar si lo hago funcionar o tengo una final. veredicto de por qué no funciona.

about 4 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 Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda