【发布时间】:2021-04-16 23:32:24
【问题描述】:
我有一个看起来像这样的 Firebase 实时数据库
我的浏览器扩展程序用于创建故事。每个故事(在“userStories”下)都与特定用户(authUID)相关联。 authID 是用户使用 Firebase 身份验证登录的 ID。每个故事在写入“故事”时都会收到一个由 push() 生成的密钥。
我正在尝试使用 Javascript 检索数据并以相反的顺序对其进行排序。我想显示最先创建的最后一个故事。
我的 JavaScript 代码(顺便说一句,不起作用)如下所示:
firebase.database().ref('/userStories/'+authUID).orderByKey().limitToLast(5).once('value').then(function(snapshot)
{
sendResponse({type: "result", status: "success", data: snapshot.val(), request: request})
})
我的问题是我的查询语句有什么问题?
在排序方面没有发生任何事情。无论我尝试orderByValue()、orderByKey() 还是orderByChild() 都没有区别。
为什么结果没有排序。
编辑:
如果我将我的代码修改为以下...
firebase.database().ref('/userStories/'+authUID).orderByKey().limitToLast(5).once('value').then(function(snapshot)
{
let results = [];
snapshot.forEach(function(child) {
console.log(child.key,child.val)
results.push({ key: child.key, value: child.val() });
console.log(results)
})
sendResponse({type: "result", status: "success", data: results, request: request})
})
这是控制台的输出...
如您所见,排序顺序仍在升序(这不是我想要的)。
我希望结果按降序排列。
感谢您的建议。
编辑:
通过添加行 results.reverse() 来反转数组,我得到了一些结果(不完全是我想要的结果)。有一种最后的键,但其余的都混在一起了。
{
let results = [];
snapshot.forEach(function(child) {
console.log(child.key,child.val)
results.push({ key: child.key, value: child.val() });
results.reverse()
console.log(results)
})
sendResponse({type: "result", status: "success", data: results, request: request})
})
控制台上的结果是:
编辑:
很抱歉进行了如此多的修改,但这是最后一个。我找到了一个解决方案,方法是使用扩展运算符 [...] 复制数组结果,然后将其反转。我添加了res = [...results].reverse() 行,这次我将结果按降序排序。
firebase.database().ref('/userStories/'+authUID).orderByKey().limitToLast(5).once('value').then(function(snapshot)
{
let results = [];
let res = [];
snapshot.forEach(function(child) {
console.log(child.key,child.val)
results.push({ key: child.key, value: child.val() });
res = [...results].reverse()
console.log(res)
})
sendResponse({type: "result", status: "success", data: res, request: request})
})
结果如下:
【问题讨论】:
标签: javascript firebase sorting firebase-realtime-database