javascript 按键(节点)排序的Firebase实时数据库

c0vxltue  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(144)

我有以下FIREBASE实时数据库结构Structure
我希望在客户端显示按日期排序的这些数据,如下所示

  • 1-9-2021
  • 13-07-2021
  • 10-12-2021
  • 10-1-2022
  • 11-1-2022

这是我在客户端显示数据的代码:
'getLogsAction(操作){此列表日期=[];此.选定=真;

console.log('action: ' + action);
console.log('tab: ' + this.tabName);
console.log('solution: ' + this.service.idSolution);

this.afs
  .list('logs/' + this.tabName + '/' + this.service.idSolution + '/' + action)
  .snapshotChanges()
  .subscribe(ok => {
    this.logsInfos = [];
    ok.forEach(elem => {
      this.listeDate.push(elem.key);
    });
  });

}`
"action"是我的节点"Connection",它包含其他节点,如"12 - 1 - 2022、13 - 7 - 2021 ...",这些节点包含每个节点的元数据。
在我的客户端视图中,代码显示如下:Display in app所以显示的内容与数据库中结构的顺序完全一样。
这里真正的麻烦是我必须排序"键节点"而不是子节点,我知道它存在orderByKey(),但我不知道如何在我的例子中使用它。
我如何按升序对这些数据进行排序("above"表示最近的日期,"below"表示最早的日期)?
谢谢!

ttisahbt

ttisahbt1#

数据中的键可能读起来像日期,但在数据库中它们实际上是字符串。实时数据库对字符串值lexicographically排序。
要得到您想要的结果,唯一的方法是将日期存储为符合您需要的字符串格式,即字典顺序与时间顺序相同的字符串格式。最常用的格式是ISO-8861,它是:

"2022-09-01": ...,
"2022-10-01": ...,
"2022-10-03": ...

因此,为了满足这种用例,您必须以这种格式存储数据,唯一的选择是按原样检索数据,然后在代码中重新排序数据。
另见:

  • 在firebase中按范围查询
  • Firebase和安卓系统:订单查询结果
  • 在firebase android中有没有办法在一个范围内获取数据?

相关问题