我们如何使用 Angular 按 TimeStamp 数据类型对 Firebase Firestore 数据进行排序?

Posted

技术标签:

【中文标题】我们如何使用 Angular 按 TimeStamp 数据类型对 Firebase Firestore 数据进行排序?【英文标题】:How can we sort Firebase Firestore data by TimeStamp dataType using Angular? 【发布时间】:2019-06-01 08:05:44 【问题描述】:

我正在使用 Ticket Posting Web 应用程序,我将只显示那些有效且在 24 小时内记录(从现在开始)内的票。

我正在使用 Firebase Cloud FirestoreAngular 7

 getTicketList()
 this.ticketData = 
 this.fireStore.collection('ticket').doc("paid").collection("ticket-list", 
 ref =>
 ref.where('status', '==', 
  "active").where("paid","==","false").orderBy("myTimeStamp");
 return this.ticketData.snapshotChanges() ;
 

我们有一个键“myTimestamp”,它是 Firestore Timestamp 类型。

只想显示那些有效且当前还有时间预订的记录。

下面我提到了我用来从 Firebase 服务获取的代码。

 this.firestore.getTicketList().subscribe(list => 
  this.ticketList = list.map(item => 
    return  id:item.payload.doc.id,
      ...item.payload.doc.data()
  )
  console.log(this.ticketList);
);

谢谢

编辑

【问题讨论】:

【参考方案1】:

您可以通过传递Date 对象来查询数据/时间戳字段。因此,例如现在获取之前的所有项目:

ref
  .where('status', '==', "active")
  .where("paid","==","false")
  .where("myTimeStamp","<", new Date())
  .orderBy("myTimeStamp")

【讨论】:

你好弗兰克,请看一下我添加到我的问题中的图片。我们进行了这些更改,但仍然没有结果并收到错误消息。 查询确实需要索引。如果您单击该错误中的链接,它将带您直接进入控制台页面以创建必要的索引。 转到断开的链接.....firebase 控制台...我的数据库中没有任何索引。 您需要在statuspaidmyTimeStamp 上添加索引。如果链接损坏,您可能需要file a bug report。 @FrankvanPuffelen 您如何将 JS Date() 格式与 Firestore 时间戳进行比较?此外,Firestore 时间戳不使用任何时区!

以上是关于我们如何使用 Angular 按 TimeStamp 数据类型对 Firebase Firestore 数据进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用innerHTML在angular 2中附加HTML内容

使用 angular.js 按自动编号字段删除记录

如何按值将对象传递给Angular2 +组件

angular2:如何按条件手动将css文件添加到index.html?

如何防止 angular-ui 模态关闭?

如何在Angular中按顺序处理2个点击事件