gpt4 book ai didi

firebase - 在StartDate和EndDate Firestore之间

转载 作者:行者123 更新时间:2023-12-03 03:49:09 25 4
gpt4 key购买 nike

我有带有startDateendDate的文档。我想在startDateendDate的范围之间查询。我可以像这样查询一个日期范围:

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 does not support the following types of queries:

  • Logical OR queries. In this case, you should create a separate query for each OR condition and merge the query results in your app.

因此,Firestore查询只能对单个属性执行范围过滤。由于您尝试过滤两个属性的范围,因此您正在处理该错误消息,这是预期的行为,因为在单个Firestore查询中无法实现。
要解决此问题,您可以选择以下解决方案之一:
  • 您也可以在查询中的一个(第一个)字段和客户端的另一个(第二个)字段上执行过滤,如官方文档所示。
  • 您可以通过某种方式将两个范围的值组合到单个字段中,以使用例具有单个字段。这种组合的一个非常成功的示例是使用地理哈希过滤经纬度属性,如Frank van Puffelen在此视频Querying Firebase and Firestore中很好地解释了。
  • 另一个选择是更改存储数据的方式并对其进行建模。最简单的实现是将startDateendDate中的所有项目放入单个集合中。由于您没有为平台选择标签,因此我将用Javascript编写必要的查询,但是对于其他编程语言也可以简单地编写该查询。因此,您可以使用以下查询来查询该集合:
      db.collection("startDate-endDate").where('date','>=', start).where('date','<=', end);
  • 另一个更通用的选择是将您需要的每个周期(年,月或日)分别存储在集合中的所有项目,然后执行必要数量的查询以获取要在每个集合中寻找的项目,itemsFromFirstYearitemsFromSecondYear等。

  • 请同时查看有关以下方面的官方文档:
  • document on compound queries and their limitations
  • video on Cloud Firestore queries

  • 恕我直言,我建议选择第一个选项。

    关于firebase - 在StartDate和EndDate Firestore之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64355207/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com