热门标签 | 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个项目.我们必须包含上一个列表中最后一个项目的密钥,这样如果有多个项目具有相同的投票数,它将返回一个以正确项目开头的列表,而不是它找到的第一个带有该数字的项目投票,可能在您从初始查询获得的列表中间的某个位置.

而已!


推荐阅读
  • 我从GoogleFirebase服务中看过视频并阅读了Cloudfirestore的文档,但我无法想象实时数据库.我想到了这个Web应用程序,我希望从不同类别的产品中存储我的提供程 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • 事件是程序各部分之间的一种通信方式,也是异步编程的一种实现形式。本文将详细介绍EventTarget接口及其相关方法,以及如何使用监听函数处理事件。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 深入理解Redis中的字典实现
    本文详细介绍了Redis中字典的实现机制,包括其底层数据结构、哈希表与哈希节点的关系、元素添加方法及rehash操作的具体流程。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本书《.NET Core 2.* 开发者指南》是面向开发者的全面学习与实践手册,涵盖了从基础到高级的各个层面。书中详细解析了 .NET Core 的核心概念,包括如何创建 .NET Core 网站,并通过视频教程直观展示操作过程。此外,还深入探讨了 Startup 类的作用、项目目录结构的组织方式以及如何在应用中使用静态文件等内容。对于希望深入了解 .NET Core 架构和开发技巧的开发者来说,本书提供了丰富的实践案例和详尽的技术指导。 ... [详细]
  • 如何处理为ListView显示空视图的问题,因为当我从Firebase数据库读取数据并将其显示在ListView中时,我不知道要放入哪些数据.我正在使用CustomListAdapter更改字体 ... [详细]
  • Spring Boot 永远滴神!10分钟快速入门
    为什么是SpringBoot因为目前开发WEB应用,SpringBoot是启动Spring项目最快最流行的方式了。无论我们要构建一个什么样的应用,它都可 ... [详细]
  • MySQL笔记_MySQL笔记1|数据库17问17答
    本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
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社区 版权所有