具有限制/偏移的 Firebase 查询可能的解决方案

Posted

技术标签:

【中文标题】具有限制/偏移的 Firebase 查询可能的解决方案【英文标题】:Firebase query with limit / offset possible solutions 【发布时间】:2014-12-29 15:06:06 【问题描述】:

有没有办法通过限制和偏移量从 firebase 检索数据?例如,我的 firebaseRef 中有大约 1000 个元素,并且想要开发某种分页。有没有办法在不加载完整对象列表的情况下做到这一点。

现在我正在使用queryLimitedToLast(limit) 来执行此操作,并为每个下一页增加limit。但是这种方法不允许我获取页数。

更新:

有一件事我没有提到,但它非常重要。我的数据从后到前显示。想象一下,它是一个简单的信使,但带有分页。所以我想显示最后 20 个项目,然后在这 20 个之前显示 20 个,等等。

谢谢。

【问题讨论】:

我回答了您关于逐步浏览以下页面的问题。 Firebase 没有内置的儿童数量计数器。如果你需要,你可以自己实现它。看到这个问题:***.com/questions/15148803/… 【参考方案1】:

是的,通过一长串子节点进行分页绝对是可能的。诀窍是记住当前页面上最后一项的键(或优先级或您排序的任何值),然后将其传递给queryStartingAt... 以用于下一页。

加藤在how to implement common SQL queries in Firebase 的博文中写了一个很好的例子:

// fetch page 2 of widgets
new Firebase("https://examples-sql-queries.firebaseio.com/widget")
   .startAt(null, lastWidgetOnPrevPage)
   .limitToFirst(LIMIT+1) // add one to limit to account for lastWidgetOnPrevPage
   .once('value', function(snap) 
      var vals = snap.val()||;
      delete vals[lastWidgetOnPrevPage]; // delete the extraneous record
      console.log('widgets on this page', vals);
   );

本示例使用的是 javascript SDK,但相关方法在 ios SDK 中也有。

请注意,此 sn-p 检索一个额外的项目 (LIMIT+1),因为我们从上一页的最后一项开始。

【讨论】:

感谢您的解决方案。我已经更新了我的问题。忘了提到一件非常重要的事情:) 有什么想法可以实现吗? 从后面开始,可以使用queryLimitedToLast and queryEndingAt`。如果您正在使用这些,但它并没有达到您期望的效果,那么您必须在您的问题中添加问题的最小再现。不要描述你的代码,展示它。

以上是关于具有限制/偏移的 Firebase 查询可能的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

具有限制和偏移量的 CodeIgniter sql 查询未显示结果

MySql 限制和偏移量给出错误的结果

PostgREST 在子查询或 CTE 中使用限制和偏移量

具有查询性能的 MySQL 限制语法

如何使用颤振在firebase中进行查询?

如何使用偏移+限制> 1000的ES查询