【问题标题】:Paginating Firebase data through the REST API on property without duplicates通过属性上的 REST API 对 Firebase 数据进行分页而不重复
【发布时间】:2017-03-14 23:21:56
【问题描述】:

在 REST API 中是否有 startAt(value, [key]) 的等价物?特别是可选的键参数。

https://www.firebase.com/docs/web/api/query/startat.html

详情:

我正在使用 REST API 对属性 (dueDate) 上的集合进行分页。对作品进行分页,但由于dueDate 的值不是唯一的,因此每个连续页面可能包含多个重复项。在最坏的情况下,某个日期的重复项可能比页面大小多,这会破坏分页。

由于 Firebase 分页工作的方式,我预计会有 1 个重复项,即上一页的最后一项。

JS SDK startAt 方法支持第二个参数,以在进行下一个查询时提供最后一个键,但这似乎不存在,或者没有记录在 REST API 中。

很遗憾,REST API 文档没有提供查询参数的完整规范,只提供了 REST 特定的参数,例如“auth”和“shallow”。

按顺序

有关详细信息,请参阅指南中有关有序数据的部分。

limitToFirst、limitToLast、startAt、endAt、equalTo

有关更多信息,请参阅指南中有关查询数据的部分。

文档:https://firebase.google.com/docs/reference/rest/database/#section-query-parameters

NodeJS 中的请求:

var request = require('request-promise');
var startAt = 0
var now = new Date().getTime(); // calculate once per paginated query
getPage(startAt, now)
// then process page
// then get the next page
// etc

function getPage(startAt, endAt, lastId) {
  var params = {
    auth: /* ... auth token ... */,
    orderBy: '"dueDate"',
    startAt: startDate, /* startDate is a Unix timestamp in milliseconds */
    endAt: endAt,
    limitToFirst: 1000
  };
  return request.get({
    url: 'https://my-firebase.firebaseio.com/todos.json',
    qs: params,
    json: true,
    timeout: 20000 /* ms */
  });
}

我看过Firebase REST API: How to fetch data by priority like startAt/endAt in JS?。较新的答案是指旧文档,如上所述,除非我错过了什么,否则不要回答这个问题。我已阅读旧文档和新文档页面中 REST 部分的所有内容。

【问题讨论】:

    标签: rest firebase pagination firebase-realtime-database


    【解决方案1】:

    对应Firebase支持后,确认REST API此时不支持startAt with key参数。

    由于我们在这种情况下的数据是用户选择的日期(因此可能存在重复),我们提出了一种解决方法,可以使用该日期来计算该日期时间的 Firebase 推送 ID,我们可以将其添加为额外的索引属性并进行分页以确保每页不超过 1 个重复项。

    下面的要点包含推送 ID 算法以及许多其他语言的端口,如果其他人遇到需要这样做的话。

    https://gist.github.com/mikelehen/3596a30bd69384624c11

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      相关资源
      最近更新 更多