我有一个包含新闻项目的 Firebase 数据库,我们总是会在首页一次显示 10 篇文章。我们希望按时间对这些文章进行排序,所以我们一直在做的就是像这样推送到我们的 firebase ref 中:
myDataRef.child("News/").push(json);
我们现在想要做的是具有这样的功能:如果用户单击下一个按钮,将从数据库中加载 10 篇后续文章。我考虑通过增加一个名为 page 的变量来实现这一点,该变量正确保存当前页码。
当涉及到查询本身时,问题就出现了。因为似乎 snapshot.val() 总是空的。
myDataRef.child("News").startAt(page*10).endAt(page*10+10).once('value',function(snapshot){
console.log(snapshot.val())
});
即使我将查询更改为硬编码:
myDataRef.child("News").startAt(0).endAt(10).once('value',function(snapshot){
console.log(snapshot.val())
});
它仍然记录一个空值。我确信“新闻”数据库中至少有 50 个条目。所以我确信错误出在查询中。
感谢任何帮助!
最佳答案
在使用辅助方法(如startAt
和endAt
)之前,您似乎需要对数据进行排序。这是因为 startAt
查找特定属性的匹配项,而不是特定索引。即使你的文章有一些日期或时间戳属性,并尝试 orderByChild('time')
你也不能真正链接 .startAt(page * 10)
因为它会寻找时间属性的匹配项,它可能是也可能不是整数。
要解决此问题,您可以使用一些 totalArticles
变量,每当您存储新文章时,该变量都会更新。然后,如果您将 articleNumber
属性添加到与保存时 totalArticles
对应的每篇文章,则您可以 orderByChild('articleNumber').startAt (page * 10).endAt(page * 10 + 10)
或者,startAt
的第二个参数似乎可以是键或索引
在这里查看更多信息:https://www.firebase.com/docs/web/api/query/startat.html 和 https://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries
编辑: 查看 firebase 博客上的这篇精彩帖子,它详细解释了这个问题,由@FrankvanPuffelen 提供: https://www.firebase.com/blog/2014-04-28-best-practices-arrays-in-firebase.html
关于javascript - JS : Getting the subsequent k items 中的初学者 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27595596/