[英]MongoDB REST API dynamic data pagination
我正在使用 Express 和 Mongoose 實現 REST API。 我的任務是為包含大量文檔的集合對結果進行分頁。 Document 是一個社交媒體帖子,它具有以下字段: created_at 、 updated_at和score 。
由於數據的性質,使用限制和頁碼的普通分頁實現不起作用。 當用戶瀏覽結果時,可以刪除或添加帖子。
我可以按照 MongoDB 文檔中的建議實現基於范圍的分頁。 頁面中的最后一項created_at值可用於查詢下一頁。
Post.find({ created_at: { $gt: req.query.next } })
但是,如果我想要的東西通過分數是不是唯一的或所有得分都是一樣的結果進行排序?
有多種方法可以做到這一點,但在您的情況下,我建議動態創建查找/排序條件並在您的查找語句中使用它們。
我的頭腦只是給你一個想法:
var MyFilter = {};
var MySort = {};
if (req.query.created_at != undefined) {
MyFilter = { created_at : { $gte : req.query.created_at) } };
}
if (req.query.sortOn != undefined){
MySort = { req.query.sort : 1 };
}
Post.find(MyFilter)
.sort(MySort)
.exec(function (err, posts) {
===do your stuff===
});
我剛剛在 google 群組中找到了相同的主題,並給出了完美的答案。
您可以嘗試在年齡和 _id 上創建一個復合索引,並按這兩個字段進行排序以獲取前三個文檔。 要獲取后續用戶集,您的查詢應返回滿足以下任一要求的文檔:
- 與上一個文檔具有相同的年齡並且具有更大的 _id 或
- 有更大的年齡
例如(lastAge 和 lastID 是最新用戶的年齡和 _id):
db.collection.find( { $or : [ { age : lastAge, _id : {$gt : lastID } } , { age : {$gt : lastID } } ] } )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.