Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB REST API动态数据分页_Mongodb_Rest_Express_Mongoose - Fatal编程技术网

MongoDB REST API动态数据分页

MongoDB REST API动态数据分页,mongodb,rest,express,mongoose,Mongodb,Rest,Express,Mongoose,我正在用Express和Mongoose实现RESTAPI。我的任务是为包含大量文档的集合对结果进行分页。文档是一个社交媒体帖子,其字段如下:created_at、updated_at和score 由于数据的性质,使用limit和page number的普通分页实现不起作用。当用户浏览结果时,可以删除或添加帖子 我可以按照MongoDB文档中的建议实现基于范围的分页。 按值创建的页面中的最后一项可用于查询下一页 Post.find({ created_at: { $gt: req.query.n

我正在用Express和Mongoose实现RESTAPI。我的任务是为包含大量文档的集合对结果进行分页。文档是一个社交媒体帖子,其字段如下:created_at、updated_at和score

由于数据的性质,使用limit和page number的普通分页实现不起作用。当用户浏览结果时,可以删除或添加帖子

我可以按照MongoDB文档中的建议实现基于范围的分页。 按值创建的页面中的最后一项可用于查询下一页

Post.find({ created_at: { $gt: req.query.next } })

但是,如果我想按分数对结果进行排序,而分数不是唯一的,或者所有分数都相同,该怎么办?

有多种方法可以做到这一点,但在您的情况下,我建议动态创建查找/排序条件,并在find语句中使用它们

从我脑子里出来给你一个想法:

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===
});

我刚刚在谷歌群组中找到了同样的话题,并给出了完美的答案

您可以尝试在年龄和_id上创建一个复合索引,并按这两个字段排序以获得前三个文档。要获取后续用户集,查询应返回满足以下任一要求的文档:

  • 与上一个文档具有相同的期限,并且具有更大的id 或
  • 年事已高
例如(lastAge和lastID是最新用户的年龄和_id):

db.collection.find({$or:[{age:lastAge,{$gt:lastID}},{age:{$gt:lastID}]})


Mongo
cursor.sort()
可以基于多个字段进行排序,例如我在一个问题中给出的。我找不到使它工作的钥匙组合。按创建的排序和分数没有区别。