我有一个带有新闻项目的Firebase数据库,我们将在首页中一次显示10篇文章。我们希望按时间对这些文章进行排序,所以我们所做的就是按照这样的方式进入我们的firebase:
myDataRef.child("News/").push(json);
我们现在要做的是具有如下功能:如果用户单击下一个按钮,则从数据库加载10个后续文章。我想通过增加一个名为page的变量来正确地保存当前页码。
当涉及到查询本身时会出现问题。似乎snapshot.val()始终为null。
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())
});
它仍然记录为null。我确信“新闻”数据库中至少有50个条目。所以我相信错误是在查询中。
感谢任何帮助!
答案 0 :(得分:1)
在使用辅助方法(例如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