簡體   English   中英

MongoDB API分頁

[英]MongoDB API pagination

想象一下當客戶端提供具有限制10的對象時的情況。
當需要接下來的10個時,它會發送跳過10並限制為10的請求。

但是,如果第一個請求偏移量== 0,則會有一些新對象被添加(或刪除)到集合中。

然后在第二次請求(帶偏移== 10)時,響應可能有錯誤的對象順序。

對它們的創建時間進行排序在這里不起作用,因為我有一些通過某些數字字段排序時形成的提要。

這實際上取決於你想要的結果。

如果您希望原始對象按原始順序而不管刪除和添加操作,那么您需要復制列表(或至少是訂單),然后翻閱它。 將每個Id復制到一個新的集合,該集合在頁面加載后不會更改,然后通過它進行分頁。

或者,也許更有可能的是,你想要的是看到當前集合中最后一個之后的10個,包括之后發生的任何刪除或添加操作。 為此,您可以使用您正在查看它們的排序順序和過濾器,$ gt,無論最后一項是什么。 但是,當您要排序的字段中存在重復項時,這不起作用。 為了解決這個問題,你需要在該字段上編制索引PLUS其他每個記錄唯一的字段,例如_id字段。 現在,您可以獲取第一組中的最后一條記錄,並查找$ eq為索引值的記錄,$ gt,_id OR只是$ gt索引值。

您可以添加一個時間字段,如created_at或updated_at。 在創建或修改文檔時必須更新它,並且該字段必須是唯一的。

然后使用$ gte和$ lte 以及此時間字段的排序查詢數據庫中的時間范圍。

這可確保在時間窗口外進行的任何更改都不會反映在分頁中,前提是時間字段沒有重復項。 最有可能的是,如果你包括microtime,重復不會發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM