我需要获取“事物”的数据:“动物”,“类型”:“哺乳动物”,“ dob”> = startDate和“ dbo” <= endDate
可以像这样查询吗
ref.where('things', '==', 'Animals').where('type', '==', 'Mammals').where('dob', '>=', startDate).where('dob', '<=', endDate)
范围过滤器可与单个==
一起使用,最多只能与一个==
一起使用。
可以像上面那样查询吗?或任何其他替代方法来实现它?
答案 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
上,因此应该可以进行查询。您将需要在things
,type
和dob
上定义一个复合索引以允许查询。如果您没有该索引,则Firestore客户端将在控制台输出中记录一个错误。如果您单击该错误消息中的链接,您将直接进入索引创建屏幕,该表单的表单已经填写了所需索引的正确信息。