热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript–如何通过firebase的子值按降序分页?

假设我有一些数据如下:{name:post#1,votes:100},{name:

假设我有一些数据如下:

{
"name": "post #1",
"votes": 100
},
{
"name": "post #2",
"votes": 10000
},
{
"name": "post #3",
"votes": 750
}

等等.

firebase中的数据显然不是通过投票排序的,而是按键排序.

我希望能够按照降序的投票数对这些数据进行分页.

我想我必须做的事情如下:

ref.orderByChild('votes')
.startAt(someValue)
.limitToFirst(someOtherValue)
.once('value', function(snapshot) {
resolve(snapshot);
});

或许,我需要使用limitToLast和endAt?

按键分页很容易,但是这个让我很难过.

更新(2017-10-16):Firebase最近宣布了Firestore – 他们完全托管的NoSQL数据存储区,这样可以更轻松地进行更复杂的查询.可能仍有一些用例可能会使用他们一直提供的实时数据库.如果你是其中一个人,这个问题仍应适用.

解决方法:

经过一整天的编码后,我发布了这个问题.

今天早上我又接受了一次破解,并且经常遇到这种情况,能够很快找到解决方案.

解:

为了对数据进行分页,我们需要能够从列表中间任意提取已排序的数据.您可以使用firebase API提供的以下功能执行此操作:

startAt

ENDAT

limitToFirst

limitToLast

更多信息可以在here找到.

在我的情况下,因为我需要降序的数据,我将使用endAt和limitToLast.

假设我希望每个页面都有五个项目.我会这样编写我的第一个查询:

ref.orderByChild('votes')
.limitToLast(5)
.once('value', function(snapshot) {
console.log('Snap: ', snapshot.val());
});

这将获得具有最高投票数的5个项目.

为了获得下一页,我们需要存储上一次查询结果中的两个数据.我们需要存储投票数,以及投票数最少的项目的关键字.也就是说,我们列表中的最后一项.

使用该数据,我们的下一个查询和所有后续查询将如下所示:

ref.orderByChild('votes')
.endAt(previousVoteCount, previousKey)
.limitToLast(5)
.once('value', function(snapshot) {
console.log('Snap: ', snapshot.val());
});

你会注意到在这个查询中我添加了endAt.这将获得从前一个列表中的最后一个开始的最多5个项目.我们必须包含上一个列表中最后一个项目的密钥,这样如果有多个项目具有相同的投票数,它将返回一个以正确项目开头的列表,而不是它找到的第一个带有该数字的项目投票,可能在您从初始查询获得的列表中间的某个位置.

而已!


推荐阅读
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 枚举使用枚举我们可以定义一些带名字的常量。使用枚举可以清晰地表达意图或创建一组有区别的用例。TypeScript支持数字的和基于字符串的枚举。数字枚举首先我们看看数字枚举,如果你使 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • ①页面初始化----------收到客户端的请求,产生相应页面的Page对象,通过Page_Init事件进行page对象及其控件的初始化.②加载视图状态-------ViewSta ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • salesforce lightning零基础学习(三)  表达式的!(绑定表达式)与 #(非绑定表达式)
    在salesforce的classic中,我们使用{!expresion}在前台页面展示信息,在lightning中,上一篇我们也提及了,如果展示attribute的值,可以使用{ ... [详细]
  • MAKER:Technovation/译:趣无尽Cherry(转载请注明出处)本次介绍的是一个由树莓派驱动的物联网滴灌系统,比往期《用树莓 ... [详细]
  • Idlikeforthenewsessiontoessentiallylogoutofanyprevioussession.Forexample,whenyou ... [详细]
author-avatar
雪恝1988_757
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有