2013-07-12 24 views
2

我建立從MongoDB中調用數據的應用程序。對於這個問題的目的,假裝用戶搜索我的應用程序的某個查詢,和MongoDB擁有4000個結果吐出來匹配查詢。分頁結果MongoDB中,而不依賴於.skip()

在閱讀了一下後,我發現可以使用.skip()方法進行分頁,but MongoDB themselves suggest against using this,因爲它需要光標遍歷所有記錄,直到您跳過的那個記錄爲止,這會變得越來越昂貴在列表中的較高位置。

我見過的依賴的結果_id屬性是連續幾個教程,但這並不適用於這裏 - 我的數據庫有記錄的成千上萬,每個都有一個唯一的ID和適用於用戶查詢的4000條結果肯定不會是連續的。

任何人都可以想辦法做到這一點,或者是skip()這裏唯一的選擇?

其他注意事項:

分頁將工作根據頁面上的位置。例如,第一個查詢應該向我的應用程序吐出20條記錄。當用戶滾動到頁面的底部,我可能會得到在頁面上20元的_id並傳遞到我的查詢,發現它在4000個結果列表中,找到後續結果,並開始下一組20從那裏。這種事情是否可行?是否會比skip()更少佔用CPU?

回答

3

如果加上_id排序,否則你不能保證秩序跟進查詢你在「其他因素」招才起作用。如果你想排序在不同的領域,你需要索引該領域。我也建議你查詢元素,這樣你就不用回去找了20元后,下一個(當然,你仍然可以只顯示前20種元素)。

MongoDB ranged pagination有一個很好的例子也是如此。