【问题标题】:Firesbase orderByChild doesn't work on timestampFirebase orderByChild 不适用于时间戳
【发布时间】:2020-03-03 17:24:33
【问题描述】:
我想在时间戳上使用 orderByChild。
但效果不好。它们甚至按升序或降序排序。
结果如下:
- 第一名:1581952308253
- 二:1581671445437
- 最后:1583254605108
这是我的代码:
toolboxesRef.orderByChild('timestamp').once('value', snapshot => {
res.json(snapshot.val())
})
我知道我可以使用数组来确定数据应该按升序还是降序排序。
但知道它甚至不排序。有谁知道这个问题吗?
【问题讨论】:
标签:
javascript
firebase-realtime-database
【解决方案1】:
JSON 对象中的属性顺序未定义。所以只要你调用snapshot.val(),子节点的顺序就会丢失。
要保持顺序,请使用snapshot.forEach() 循环遍历子节点:
toolboxesRef.orderByChild('timestamp').once('value', snapshot => {
snapshot.forEach(child => {
console.log(child.val())
})
})
因此,如果您想将键和值都返回到res,您需要将快照转换为数组:
toolboxesRef.orderByChild('timestamp').once('value', snapshot => {
let response = [];
snapshot.forEach(child => {
response.push({ key: child.key, value: child.val() });
})
res.json(response);
})