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

221
Vistas
El parámetro Query.orderBy() inicial tiene que ser el mismo que el(los) parámetro(s) fieldPath de Query.where() cuando se invoca un operador de desigualdad

Tengo este código en el que intento obtener un documento de una colección donde el tiempo no es más antiguo que hace media hora. Falla exactamente en el operador de desigualdad.

 try { const HALF_HOUR = 0.1 * 6000 * 6000 / 2; const tsToMillis = firebase.firestore.Timestamp.now().toMillis(); const currenttime = new Date(tsToMillis - HALF_HOUR); const myCurrentLoc = location[0]; // my device location const latitude = myCurrentLoc.latitude; const longitude = myCurrentLoc.longitude; const geocollection = GeoFirestore.collection('chats'); const query = await geocollection.limit(1).near({ center: new firebase.firestore.GeoPoint(latitude, longitude), radius: 0.03 }); query.where('details.time', '>=', currenttime).get().then((querySnapshot) => { if (!querySnapshot.empty) { querySnapshot.docs.forEach(documentSnapshot => { if (documentSnapshot.exists) { this.fetchAllMessages(documentSnapshot.id); } }); } }).catch(error => { console.error("Error in fetch_messages", error); }); } catch (e) { console.error("Something happened: ", e); // ERROR IS TRIGGERED HERE }

C:\MyProjects\BLEConnect\node_modules\react-native\Libraries\Core\ExceptionsManager.js:180 Ocurrió algo: Error: firebase.firestore().collection().orderBy() Consulta no válida. Parámetro inicial de Query.orderBy(): g.geohash tiene que ser el mismo que el(los) parámetro(s) de Query.where() fieldPath: detalles.tiempo cuando se invoca un operador de desigualdad

Este error ocurrió solo cuando se invocaba el operador de desigualdad pero no el operador de igualdad "==". ¿Porque? Simplemente no lo entiendo.

PD: el campo "tiempo" se agrega cuando se ha creado el geohash, por lo que en la misma consulta:

 const tsToMillis = firebase.firestore.Timestamp.now().toMillis(); const currenttime = new Date(tsToMillis); const geocollection = GeoFirestore.collection('chats'); geocollection.add({ name: 'Geofirestore', uid: device_id, coordinates: new firebase.firestore.GeoPoint(latitude, longitude), time: currenttime })
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

De la documentación de Firestore sobre las limitaciones de consulta :

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

La forma en que se implementan los operadores de desigualdad requiere que ordenes en ese campo primero. Para el operador de igualdad, Firestore puede hacer más por sí mismo, por ejemplo, combinar información de múltiples índices en lo que se conoce como zig-zag-merge-join.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede hacer algo como esto, preste atención al 'nativo' que extiende las consultas nativas de firestore:

 const geocollection = GeoFirestore.collection('myCollection'); const query = geocollection.near({ center: new firebase.firestore.GeoPoint(latitude, longitude), radius: 0.05 }) .native.where("created", ">", thirty_mins_old).orderBy("created", "desc");
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