如何将 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
,您的查询应该是可行的。您将需要在 things
、type
和 dob
上定义复合索引以允许查询。如果您没有该索引,Firestore 客户端将在控制台输出中记录错误。如果您单击该错误消息中的 link,您将直接进入索引创建屏幕,其中的表格已经填写了所需索引的正确信息。
此处的文档https://firebase.google.com/docs/firestore/query-data/queries
表示要将等式与范围结合起来,您需要创建复合索引。
我想您的查询会起作用,因为您只在一个字段上执行范围查询,但您需要创建一个复合索引才能做到这一点。
您可以在此处阅读有关创建复合索引的更多信息https://firebase.google.com/docs/firestore/query-data/indexing
正如 AndrewHill 在评论中指出的那样。看起来 firestore 将允许您在第一次尝试查询后自动创建一个复合索引。所以这绝对应该在需要的地方有所帮助。
我需要获取 '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
,您的查询应该是可行的。您将需要在 things
、type
和 dob
上定义复合索引以允许查询。如果您没有该索引,Firestore 客户端将在控制台输出中记录错误。如果您单击该错误消息中的 link,您将直接进入索引创建屏幕,其中的表格已经填写了所需索引的正确信息。
此处的文档https://firebase.google.com/docs/firestore/query-data/queries
表示要将等式与范围结合起来,您需要创建复合索引。
我想您的查询会起作用,因为您只在一个字段上执行范围查询,但您需要创建一个复合索引才能做到这一点。
您可以在此处阅读有关创建复合索引的更多信息https://firebase.google.com/docs/firestore/query-data/indexing
正如 AndrewHill 在评论中指出的那样。看起来 firestore 将允许您在第一次尝试查询后自动创建一个复合索引。所以这绝对应该在需要的地方有所帮助。