javascript - 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 实时数据库
解决方案
简而言之,不要调用toString()
,Date.now()
只需将其保留为数字即可。
来自firebase 文档:
4:具有数值的子项紧随其后,按升序排列。如果指定子节点的多个子节点的数值相同,则按key排序。
5:字符串在数字之后,并按字典顺序升序排序。如果指定子节点的多个子节点具有相同的值,则它们按字典顺序键排序。
如您所见,字符串值始终排在数字之后,因此通过在 上指定一个字符串startAt
,您可以保证该字段的数值不会出现在结果中。由于您的所有条目都是数字,这意味着您的结果是null
.