如何使用 AngularFire 查询 Firebase 时间戳字段?

How to query for Firebase timestamp field using AngularFire?

我正在尝试检索日期字段(时间戳类型)小于当前系统时间的所有文档。 我的打字稿文件中的 AngularFirestore 查询如下所示。

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

以上查询不包含任何文档。

不胜感激。

刚刚在我的应用程序上测试过,我猜你的数据库中有日期 (or actually a Timestamp),所以你应该将该字段与日期对象进行比较:

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

顺便说一句,如果用户的设备时钟在他的设备之间不同步,或者如果值在不同时间范围内的用户之间共享,这可能会导致奇怪的行为。所以最好的做法是在将值放入字段时使用 serverTimestamp :

firebase.firestore.FieldValue.serverTimestamp()

在查询数据时,firebase.firestore.FieldValue.serverTimestamp() 方法不可用,因此您有以下选择:

  • 信任用户的时钟并使用提到的 new Date()firebase.firestore.Timestamp.now()。那你可以考虑安全规则,防止用户作弊。
  • 必要时使用可调用的云函数进行具体和精确的比较。

总的来说,我认为 new Date() 方法是最简单的,并且适用于大多数情况。