javascript - JS : Getting the subsequent k items 中的初学者 Firebase

标签 javascript firebase

我有一个包含新闻项目的 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 个条目。所以我确信错误出在查询中。

感谢任何帮助!

最佳答案

在使用辅助方法(如startAtendAt)之前,您似乎需要对数据进行排序。这是因为 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.htmlhttps://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/

相关文章:

javascript - Firebase 读取特定键值

firebase - 如果成功验证,如何修改 firebase 身份验证响应以包含指向应用程序的链接?

ios - 将录制的音频上传到 Firebase

javascript - 关闭 requirejs promise

javascript - 如何使用 AES 通过 CryptoJS 进行解密?

javascript - React中数据存储在哪里?

Firebase 分析 : Understanding weird user engagement numbers

javascript - 如何处理 "open in new tab"事件?

javascript - 换行符后 getBoundingClientRect 的定位不正确

android - 从 GCM 迁移到最新的 FCM 但获得相同的 token