【问题标题】:Order By using Firebase [closed]使用 Firebase 订购 [关闭]
【发布时间】:2020-04-25 06:29:05
【问题描述】:

我正在处理一个 Ionic 项目,当我想在屏幕上显示 firebase 文档时,我想按日期对它们进行排序,这是我收藏的每个文档中的日期类型字段:

这是我用来将 firebase 文档引入我的应用程序的代码。

constructor(private aF: AngularFirestore, private aS: AuthServiceService) {
    this.aF.collection('orders', ref => ref.where('location', '==', 'Store Name Example')).valueChanges().subscribe( data => {
      this.userOrders = data;
    });

  }

任何帮助都会很棒!

【问题讨论】:

  • 问题是什么
  • 请阅读文档并尝试从那里学到的知识:firebase.google.com/docs/firestore/query-data/…
  • 已经试过了!但它不会在屏幕上显示 0 个结果!
  • 您的代码中没有任何内容可以执行任何排序,因此问题尚不清楚。再看一下文档链接,并将您的注意力引向.order(by... 的使用。提供您的 Firebase 结构示例也很有帮助,以便我们了解集合和文档的外观。

标签: typescript firebase ionic-framework google-cloud-firestore


【解决方案1】:

有关如何订购和限制数据的信息,请参阅 Firestore 文档:https://firebase.google.com/docs/firestore/query-data/order-limit-data

constructor(private aF: AngularFirestore, private aS: AuthServiceService) {
    this.aF.collection('orders', ref => ref.where('location', '==', 'Store Name Example').orderBy('date'))
        .valueChanges()
        .subscribe( data => {
            this.userOrders = data;
        }
    );
}

为了能够订购日期,您必须在 Firestore 中以时间戳类型存储字段:https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp

如果您将日期存储在不可排序的字符串中,则无法对其进行排序。您可以订购存储的日期,例如yyyymmdd 格式或双精度。

要解决这个问题,您可以获取数据并使用 Timestamp 数据类型重新保存。

【讨论】:

  • 已经试过了!但它不会在屏幕上显示 0 个结果!
  • @RogelioSalazar 所以在过滤结果之前,屏幕上有一些结果,但是在应用 orderBy(...) 之后,没有结果显示并且控制台中没有错误?你确定,你以日期格式而不是字符串存储日期?
  • 再次感谢您的快速回复!我刚刚检查并在firebase上显示为字符串而不是时间戳。有什么解决办法吗?不,我在控制台上没有收到任何错误。
  • 非常感谢!现在搞定了!
  • @RogelioSalazar 如果将日期存储在字符串中,则无法订购。 不准确。日期可以采用这种格式yyyymmdd,在这种情况下,它很容易订购——但它必须采用这种特定的格式。此外,一些用例将日期存储为双精度,这又是可订购的。如果引用是 Firestore Server Timestamp,那么它也是可订购的。
猜你喜欢
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多