我正在尝试使用 orderByChild()
在 Firebase 中按时间戳进行排序,但它不起作用。结果似乎是按键排序的,而 Firebase 似乎忽略了 orderByChild()
。
从时间上可以看出,这些结果并不是按时间戳排序的。
lorem-ipsum-dolor-si - 17/6/2016 a las 8:51:33
lorem-ipsum-dolor-si193 - 17/6/2016 a las 8:51:37
lorem-ipsum-dolor-si297 - 17/6/2016 a las 8:51:43
lorem-ipsum-dolor-si402 - 17/6/2016 a las 8:51:38
这是我获取数据的方式:
let endpoint = 'texts/-KKPSjKwelbXG6Rq8AEh/-KKQqtg_a95p4Gm13XgZ'
firebase.database().ref(endpoint).orderByChild('timestamp').on('value',...)
并且由于 snapshot.val()
将按键排序,而不是按 orderByChild()
顺序排序,我必须将排序的快照存储在数组中并将其发送回 View 。
this.data = []
snapshot.forEach(function(child) {
this.data.push(child.val())
}.bind(this))
return this.data
时间戳来自Date.now()
。我已尝试将其存储为 Number
或 String
,结果相同。
如您所见,它在 Firebase 中存储良好:
{
"-KKPSjKwelbXG6Rq8AEh" : {
"-KKQqtg_a95p4Gm13XgZ" : {
"lorem-ipsum-dolor-si" : {
"body" : "\t<body>\n\t\tLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\t</body>",
"timestamp" : 1466171493149
},
"lorem-ipsum-dolor-si193" : {
"body" : "\t<body>\n\t\tLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\t</body>",
"timestamp" : 1466171497193
},
"lorem-ipsum-dolor-si297" : {
"body" : "\t<body>\n\t\tLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\t</body>",
"timestamp" : 1466171503297
},
"lorem-ipsum-dolor-si402" : {
"body" : "\t<body>\n\t\tLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\t</body>",
"timestamp" : 1466171498402
}
}
}
}
我错过了什么?
编辑:
问题是我创建了引用,然后添加了 orderByChild()
。
let ref = firebase.database().ref(endpoint)
...
ref.orderByChild('timestamp')
...
ref.on('value',onChange)
我这样做是因为我有一个类可以动态创建对 Firebase 的这些调用。
最佳答案
对我有用:
firebase.database().ref(endpoint)
.orderByChild('timestamp')
.on('value', function(snapshot) {
this.data = [];
snapshot.forEach(function(child) {
this.data.push(child.val());
}.bind(this));
console.log("all", data.map(function(val) { return new Date(val.timestamp).toString(); }));
});
"all"
["Fri Jun 17 2016 06:51:33 GMT-0700 (PDT)", "Fri Jun 17 2016 06:51:37 GMT-0700 (PDT)", "Fri Jun 17 2016 06:51:38 GMT-0700 (PDT)", "Fri Jun 17 2016 06:51:43 GMT-0700 (PDT)"] Blockquote
firebase.database().ref(endpoint)
.orderByChild('timestamp')
.startAt(1466171497190)
.endAt(1466171498405)
.on('value', function(snapshot) {
this.data = [];
snapshot.forEach(function(child) {
this.data.push(child.val());
}.bind(this));
console.log("filtered", data.map(function(val) { return new Date(val.timestamp).toString(); }));
});
"filtered"
["Fri Jun 17 2016 06:51:37 GMT-0700 (PDT)", "Fri Jun 17 2016 06:51:38 GMT-0700 (PDT)"]
关于javascript - 如何使用 Firebase 按时间戳排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37883620/