如何在Cloud Firestore中使用逻辑OR执行复合查询?

Pro*_*mit 24 database firebase google-cloud-platform google-cloud-firestore

来自文档:

您还可以链接多个where()方法以创建更具体的查询(逻辑AND).

我该如何执行OR查询?例:

  1. 给我所有字段status为openOR的文档upcoming
  2. 给我所有文件的领域status == openORcreatedAt <= <somedatetime>

Dan*_*ath 16

OR不受支持,因为服务器很难扩展它(需要将状态保持为重复数据删除).解决方法是发出2个查询,每个条件一个,以及客户端上的重复数据删除.

  • 我理解答案,但是如果我想获得所有文件,其中字段`status`是`a`或`b`或`c`或```(让我们说50 OR).我是否需要执行50个查询并加入它们?它看起来不是最优的吗?我错了吗?有没有更好的方法来解决这个问题?谢谢. (23认同)
  • “服务器很难扩展”的说法只不过是谷歌缺乏技能的蹩脚借口。仅仅因为您的名字是“Google”,并不意味着您就自动获得了该领域的专业知识。其他索引服务器确实支持 OR 运算符。 (9认同)
  • @GeekGuy您认为Google希望减少客户付款吗? (6认同)

Kar*_*iem 10

随着最近添加的 IN 查询,Firestore 支持“同一字段上最多 10 个具有逻辑OR 的相等子句”

(1) 的可能解决方案是:

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

Run Code Online (Sandbox Code Playgroud)

请参阅Firebase 指南:查询运算符 | in和array-contains-any