我有startDate
和endDate
的文件。我想查询startDate
和endDate
的范围。我可以查询一个日期的范围,如下所示:
whereField("startDate", isGreaterThan: start).whereField("startDate, isLessThan: end)
但是我不能像这样查询两个字段:
whereField("startDate", isGreaterThan: start).whereField("endDate", isLessThan: end)
在复合where语句中使用多个字段时,Firestore会引发异常。
无论您使用什么平台构建应用程序,我都确定您获得的错误非常明确。关于此主题,Cloud Firestore官方文档也非常明确。所以当涉及到Firestore时,有一些query limitations:
Cloud Firestore不支持以下类型的查询:
- 逻辑OR查询。在这种情况下,您应该为每个OR条件创建单独的查询,并将查询结果合并到您的应用程序中。
因此,Firestore查询只能对单个属性执行范围过滤。由于您尝试过滤两个属性上的范围,因此您需要对该错误消息进行调整,这是预期的行为,因为这在单个Firestore查询中是不可能的。
要解决此问题,您可以选择以下解决方案之一:
startDate
和endDate
中的所有项目放入单个集合中。由于您没有为平台选择标记,我将在Javascript中编写必要的查询,但也可以简单地为其他编程语言编写。因此,您可以使用以下查询查询该集合:
db.collection("startDate-endDate").where('date','>=', start).where('date','<=', end);
itemsFromFirstYear
,itemsFromSecondYear
等。请参阅以下官方文档:
恕我直言,我建议拿起第一个选项。