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

222
Views
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 answers
Answer question

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 Report

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 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!