- 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/