Как я могу получить данные только с указанной даты c с помощью Firestore? - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь поместить все документы из коллекции в список, используя firestore, я хочу документы, которые были загружены только в определенный год.

Во всех документах есть поле, которое называется " dateAdded ", в котором хранится дата, отформатированная в 'dd-MM-гггг'.

для тестирования У меня есть только 3 документа, 2 загруженных в 2020 году и 1 в 2019

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

У меня есть пытался сделать так, работает только первое условие. Есть предложения?

Ответы [ 2 ]

1 голос
/ 14 января 2020

Существует нечто, называемое startAt или startAfter и endAt или endBefore, которое вы можете использовать, чтобы использовать его, вы должны сначала упорядочить поле, в котором вы хотите использовать запрос, поэтому здесь я использую startAt и endAt, который должен дать вам желаемый результат, который, я считаю, является рекордным за весь год

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();
0 голосов
/ 14 января 2020

похоже, что вы храните данные в виде строки. Я предлагаю хранить данные в секундах, как это

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 и ггггг необходимо инт. Посмотрите на https://www.epochconverter.com, чтобы понять, как работает время эпохи

Например, если вы хотите захватить все записи в 2019 году, вы должны сначала определить время эпохи для 1 января 2019 года и затем время в секундах для 31-го числа c 2019. Если вы используете веб-сайт, вы получите следующее

  • 1 января 2019 года = 1546300800
  • 31-го числа c 2019 = 1577836799

enter image description here Поэтому ваш код должен выглядеть следующим образом

QuerySnapshot querySnapshot= await Firestore.instance
                      .collection('Deceased')
                      .where("dateAdded",
                      isGreaterThanOrEqualTo: 1546300800)
                       .where("dateAdded",isLessThanOrEqualTo: 1577836799 )
                      .getDocuments();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...