Как запросить поле временной метки Firebase, используя AngularFire? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь получить все документы, у которых поле даты (отметка времени) меньше текущего системного времени. Запрос AngularFirestore в моем файле машинописи выглядит следующим образом.

this.afs.collection<events>('events' , ref => ref.where('date' , '<' , Date.now())).snapshotChanges();

Вышеупомянутый запрос не содержит никаких документов.

Помощь будет принята.

1 Ответ

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

Только что протестировано в моем приложении, я думаю, у вас есть дата ( или фактически отметка времени ) в вашей БД, поэтому вы должны сравнить поле с объектом Date:

this.afs.collection<events>('events' , ref => ref.where('date' , '<' , new Date())).snapshotChanges();

Между прочим, это может привести к странному поведению, если часы устройства пользователя не синхронизированы c между его устройствами или если значение совместно используется пользователями в разные периоды времени. Поэтому лучше всего использовать serverTimestamp при помещении значения в поле:

firebase.firestore.FieldValue.serverTimestamp()

Когда дело доходит до запроса данных, метод firebase.firestore.FieldValue.serverTimestamp() недоступен, поэтому вы осталось со следующими параметрами:

  • Доверяя часам пользователя и используя упомянутые new Date() или firebase.firestore.Timestamp.now(). В этом случае вы можете подумать о правилах безопасности, чтобы запретить пользователям мошенничество.
  • Использование функции вызываемого облака для определения c и точного сравнения, если они необходимы.

В целом Я думаю, что new Date() подход является самым простым и работает в большинстве случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...