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”。
ORDERBY
有关详细信息,请参阅指南中有关有序数据的部分。
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部分的所有内容。
答案 0 :(得分:1)
在与Firebase支持相对应后,他们已确认REST API目前不支持带关键参数的startAt。
由于我们在这种情况下的数据是用户选择的日期(因此可能存在重复),我们提出了一种解决方法,使用日期来计算该日期时间的firebase推送ID,我们可以将其添加为额外的索引属性和分页,以确保每页不会超过1个重复。
下面的要点包含推送ID算法,其中包含许多其他语言的端口,如果有其他人需要这样做的话。