如何将 where 子句与多个 `==`、多个 `>=`、多个 `<=` 范围过滤器链接起来

How to chain where clause with multiple `==`s , multiple `>=`, multiple `<=` range filters

我需要获取 'things' 的数据:'Animals'、'type':'Mammals'、'dob' >= startDate 和 'dbo' < =结束日期

是否可以这样查询 ref.where('things', '==', 'Animals').where('type', '==', 'Mammals').where('dob', '>=', startDate).where('dob', '<=', endDate)

范围过滤器适用于单个 ==,但不超过一个 ==。 可以像上面那样查询吗?或者任何其他替代方法来实现它?

Cloud Firestore 只能对单个字段应用范围过滤器,但可以对多个字段应用相等过滤器。有关示例和说明,请参阅 documentation on compound queries

由于您唯一的范围过滤器是 dob,您的查询应该是可行的。您将需要在 thingstypedob 上定义复合索引以允许查询。如果您没有该索引,Firestore 客户端将在控制台输出中记录错误。如果您单击该错误消息中的 link,您将直接进入索引创建屏幕,其中的表格已经填写了所需索引的正确信息。

此处的文档https://firebase.google.com/docs/firestore/query-data/queries

表示要将等式与范围结合起来,您需要创建复合索引。

我想您的查询会起作用,因为您只在一个字段上执行范围查询,但您需要创建一个复合索引才能做到这一点。

您可以在此处阅读有关创建复合索引的更多信息https://firebase.google.com/docs/firestore/query-data/indexing

正如 AndrewHill 在评论中指出的那样。看起来 firestore 将允许您在第一次尝试查询后自动创建一个复合索引。所以这绝对应该在需要的地方有所帮助。