首页 > 解决方案 > orderByChild 和 startAt firebase 实时使用日期时间戳不返回数据

问题描述

- 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,因为我正在进行无限滚动并且我需要能够指定最后一个时间戳记录。我究竟做错了什么?我想提取前 7 条记录

使用 firebase 实时数据库

标签: javascriptfirebasefirebase-realtime-database

解决方案


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


来自firebase 文档

4:具有数值的子项紧随其后,按升序排列。如果指定子节点的多个子节点的数值相同,则按key排序。

5:字符串在数字之后,并按字典顺序升序排序。如果指定子节点的多个子节点具有相同的值,则它们按字典顺序键排序。

如您所见,字符串值始终排在数字之后,因此通过在 上指定一个字符串startAt,您可以保证该字段的数值不会出现在结果中。由于您的所有条目都是数字,这意味着您的结果是null.


推荐阅读