Только что протестировано в моем приложении, я думаю, у вас есть дата ( или фактически отметка времени ) в вашей БД, поэтому вы должны сравнить поле с объектом 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()
подход является самым простым и работает в большинстве случаев.