Firebase:startAt() 不过滤使用键存储的数据,自纪元以来的小时数

Firebase: startAt() is not filtering data stored with keys as hours since epoch

我的数据是用键存储的,自纪元以来的小时数。我只想获取数据的一部分 - 例如,我想指定我希望所有数据都从 453615.

开始

到目前为止我得到了这个代码:

  this.dbService.databaseRef.child('dev_trends/' + this.deviceUid)
  .orderByKey()
  .startAt('453615')
  .get().then(dataTrends => {
    const data = dataTrends.val();

    console.log(data);
  });

使用上面的代码,我在我的控制台中得到了这个结果:

我的数据模型如下所示:

我应该在我的代码中更改什么以便从 Firebase 过滤数据?


我使用以下代码在服务中创建了 databaseRef 变量:

  constructor(private db: AngularFireDatabase) {
    //Set what happens when we read all devices
    this.databaseRef = db.database.ref(); //Create databaseReference
  }

Json 我的数据:

  {"dev_trends" : {
    "-MkMxxZXXzmKclgeGPde" : {
      "H" : {
        "453614" : "50;45",
        "453615" : "50;50",
        "453617" : "50;55",
        "453630" : "51;60"
      },
      "T" : {
        "453614" : "24;18",
        "453615" : "23;17",
        "453617" : "23;15",
        "453630" : "22;10"
      }
    }
  }}

找出问题所在:

  • startAt() 方法使用键 HT 过滤数据,并且 不是这些键中的数据列表。
  • 解决方案是重构数据模型。

新数据模型:


附加信息:

  • 我并不是说我的解决方案是理想的 - 但对于我的具体问题 会成功的。
  • 我仍然需要做一些额外的工作 - 所以如果其他人对此有更好的解决方案,请 post 你的答案也一样:)