如何使用Firestore仅从特定日期获取数据?

时间:2020-01-14 07:23:17

标签: date flutter dart google-cloud-firestore

我正在尝试使用Firestore将集合中的所有文档放入列表中,我希望仅在特定年份上传的文档。

所有文档中都有一个名为“ dateAdded”的字段,用于存储格式为“ dd-MM-yyyy”的日期。

为了测试,我只有3个文档,其中2020年上传了2个文档,2019年上传了1个文档

QuerySnapshot querySnapshot= await Firestore.instance
                      .collection('Deceased')
                      .where("dateAdded",
                      isGreaterThanOrEqualTo:"01-01-"+year )
                       .where("dateAdded",isLessThanOrEqualTo:"31-12-"+year )
                      .getDocuments();

我尝试过这种方式,只有第一个条件有效。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用一种叫做startAtstartAfter以及endAtendBefore的东西,要使用这些东西,必须先对要查询的字段进行排序因此,我在这里使用startAtendAt,它们应该为您提供想要的结果,我认为这是整年的记录

QuerySnapshot querySnapshot= await Firestore.instance
                      .collection('Deceased')
                      .orderBy('dateAdded')
                      .startAt([DateTime(year,1,1,0,0,0)])
                      .endAt([DateTime(year,12,31,23,59,59])(
                      .getDocuments();

答案 1 :(得分:0)

似乎您将数据存储为字符串。我建议像这样在几秒钟内存储数据

final dateNow = DateTime.now();
final int seconds = (dateNow.millisecondsSinceEpoch ~/ 1000);

一旦您将数据存储在Firebase中,就非常容易处理

QuerySnapshot querySnapshot= await Firestore.instance
                      .collection('Deceased')
                      .where("dateAdded",
                      isGreaterThanOrEqualTo:xxxxxxx)
                       .where("dateAdded",isLessThanOrEqualTo:yyyyyy )
                      .getDocuments();

xxxxxxx和yyyyyy必须为整数。看看https://www.epochconverter.com,了解纪元时间是如何工作的

例如,如果要捕获2019年的所有记录,则应首先确定2019年1月1日的纪元时间,然后确定2019年12月31日的纪元时间。如果使用该网站,您将获得以下

  • 2019年1月1日= 1546300800
  • 2019年12月31日= 1577836799

enter image description here 所以你的代码应该像这样

QuerySnapshot querySnapshot= await Firestore.instance
                      .collection('Deceased')
                      .where("dateAdded",
                      isGreaterThanOrEqualTo: 1546300800)
                       .where("dateAdded",isLessThanOrEqualTo: 1577836799 )
                      .getDocuments();