Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

208
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda