- foo
|--- -LK7rNAPKZP7drHK1eb_
      |- timeStamp: 1534966072658
|--- -LKAPfu2lLl2B5zInIhX
      |- timeStamp: 1534965117552
|--- -LKJN97VxOhnE8XoNSQN
      |- timeStamp: 1534946072623

db.ref('foo').orderByChild('timeStamp').startAt(Date.now().toString()).limitToLast(7).once('value', data => {
    console.log(data.val());
}


结果为空。当我不放.startAt时,我可以获取数据,并且实际上是按时间戳排序的。但是,我需要设置startAt,因为我正在进行无限滚动,因此我需要能够指定最后一个timeStamp记录。我究竟做错了什么?我想拉前7条记录

使用Firebase实时数据库

最佳答案

简而言之,不要在toString()上呼叫Date.now(),只需将其保留为数字即可。



firebase docs


  4:具有数字值的子项紧随其后,以升序排列。如果
  多个子项具有指定的相同数值
  子节点,它们按键排序。
  
  5:字符串紧随数字之后
  按字典顺序升序排列。如果有多个孩子
  指定的子节点具有相同的值,它们是有序的
  在字典上按键。


如您所见,字符串值始终按数字排序,因此通过在startAt上指定字符串,可以确保结果中不会包含带有该字段的数值的条目。由于您输入的所有内容均为数字,因此您的结果为null

关于javascript - 使用Date时间戳实时返回orderByChild和startAt firebase而不返回数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51974375/

10-09 17:17