【发布时间】:2016-10-19 09:54:30
【问题描述】:
我正在尝试使用 orderByChild() 在 Firebase 中按时间戳排序,但它不起作用。结果似乎是按键排序的,而 Firebase 似乎忽略了orderByChild()。
从时间上可以看出,这些结果并不是按时间戳排序的。
lorem-ipsum-dolor-si - 17/6/2016 拉斯 8:51:33
lorem-ipsum-dolor-si193 - 17/6/2016 拉斯 8:51:37
lorem-ipsum-dolor-si297 - 17/6/2016 拉斯 8:51:43
lorem-ipsum-dolor-si402 - 17/6/2016 拉斯 8:51:38
这就是我获取数据的方式:
let endpoint = 'texts/-KKPSjKwelbXG6Rq8AEh/-KKQqtg_a95p4Gm13XgZ'
firebase.database().ref(endpoint).orderByChild('timestamp').on('value',...)
由于snapshot.val() 将按键排序,而不是按orderByChild() 顺序,我必须将排序的快照存储在数组中并将其发送回视图。
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 的调用。
【问题讨论】:
-
您能否在问题中添加以下内容:
ref(...)指向什么?您在问题中包含了 JSON 树的图片。请将其替换为实际的 JSON 作为文本,您可以通过单击 Firebase 控制台中的导出按钮轻松获取该文本。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。 -
确保所有信息都以可搜索的格式出现在您的问题中。没有文字链接,请不要文字图片。
-
完成。我没有放完整的数据,因为它几乎是一样的。
标签: javascript firebase firebase-realtime-database