如何使用多个`==`s,多个`> =`,多个`<=`范围过滤器链接where子句

时间:2019-06-24 13:43:33

标签: javascript google-cloud-firestore angularfire2 querying

我需要获取“事物”的数据:“动物”,“类型”:“哺乳动物”,“ dob”> = startDate和“ dbo” <= endDate

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

范围过滤器可与单个==一起使用,最多只能与一个==一起使用。 可以像上面那样查询吗?或任何其他替代方法来实现它?

2 个答案:

答案 0 :(得分:2)

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

说要将等式与范围结合起来,就需要创建一个复合索引。

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

您可以在https://firebase.google.com/docs/firestore/query-data/indexing

上阅读有关创建复合索引的更多信息。

正如AndrewHill在评论中指出的。看起来Firestore允许您在第一次尝试查询复合索引后自动创建复合索引。因此,这绝对可以在需要的地方提供帮助。 ??

答案 1 :(得分:0)

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

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