2016-11-01 48 views
0

REST API中是否有相當於startAt(value, [key])?特別是可選的關鍵參數。通過屬性上的REST API分頁Firebase數據,無重複

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

詳情:

我通過收集有關使用REST API的屬性(的dueDate)分頁。通過工作分頁,但由於dueDate的值不是唯一的,每個後續頁面可能包含多個重複項。在最糟糕的情況下,日期可能會多於頁面大小,這會破壞分頁。

由於Firebase通過作品分頁的方式,我期待1個重複項,即上一頁中的最後一項。

JS SDK startAt方法支持第二個參數,用於在進行下一個查詢時提供最後一個鍵,但這似乎不存在,或者未在REST API中記錄。

無用的是,REST API文檔不提供查詢參數的完整規範,只提供像「auth」和「shallow」這樣的REST特定的參數。

排序依據

參見有序數據的指南中的部分獲取更多信息。

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部分的所有內容。

回答

1

與Firebase支持相對應後,他們已確認此時REST API不支持帶關鍵參數的startAt。

由於我們在這種情況下的數據是用戶選擇的日期(所以可能有重複),我們想出了一個解決方法來使用日期來計算該日期的Firebase推送ID,我們可以將其添加爲一個額外的索引屬性和分頁以確保每頁不會超過1個重複。

下面的要點包含推送ID算法以及許多其他語言的端口,如果有其他人遇到需要這樣做的話。

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

相關問題