¿Cómo realizar consultas compuestas con OR lógico en Cloud Firestore?

Resuelto ProblemsOfSumit asked hace 54 años • 13 respuestas

De los documentos :

También puede encadenar varios métodos where() para crear consultas más específicas (Y lógica).

¿ Cómo puedo realizar una ORconsulta? Ejemplo:

  1. Dame todos los documentos donde statusestá el campo openOupcoming
  2. Dame todos los documentos donde está el campo status == openOcreatedAt <= <somedatetime>
ProblemsOfSumit avatar Jan 01 '70 08:01 ProblemsOfSumit
Aceptado

ORno es compatible porque al servidor le resulta difícil escalarlo (requiere mantener el estado en deduplicación). La solución alternativa es emitir 2 consultas, una para cada condición, y desduplicar el cliente.


Editar (noviembre de 2019):

Cloud Firestore ahora admite INconsultas que son un tipo limitado de ORconsulta.

Para el ejemplo anterior, podrías hacer:

// Get all documents in 'foo' where status is open or upcmoming
db.collection('foo').where('status','in',['open','upcoming']).get()

Sin embargo, todavía no es posible realizar una ORcondición general que involucre múltiples campos.

Dan McGrath avatar Oct 08 '2017 16:10 Dan McGrath

Con la reciente incorporación de consultas IN , Firestore admite "hasta 30 cláusulas de igualdad en el mismo campo con un OR lógico "

Una posible solución a (1) sería:

documents.where('status', 'in', ['open', 'upcoming']);

Consulte las guías de Firebase: operadores de consulta | inyarray-contains-any

La compatibilidad con consultas OR generales se anunció en Google I/O 2023 , por lo que, según la documentación, una solución para (2) sería:

query(collection(db, '{collection-name}'), or(
  where('status', '==', 'open'),   
  where('createdAt', '<=', somedatetime),   
));

Vea un ejemplo completo en GitHub/firebase: snippets-node: index.js#orQueries .

Kariem avatar Dec 06 '2019 16:12 Kariem