MongoDB / Node.js中的Mongoose文本搜索分页

时间:2015-06-06 11:26:33

标签: node.js mongoose

我有这个问题,我不知道如何在Mongoose文本搜索模块中进行分页,我是初学者,所以请帮忙,这是我的代码:

searchModul.create({ title: title, description: description }, function (err) {
  if (err) return handleError(err);
  searchModul.textSearch(title, function (err, output) {
    if (err) return handleError(err);
    res.render('search', { 
          title   : 'title',
          results  : output.results
    });
  });
}); 

我也想知道如何在search.ejs视图中显示该分页。并提前感谢。

3 个答案:

答案 0 :(得分:0)

要实施分页,请使用$limit为每个查询定义限制,并$skip导航页面。

来自文档:
$limit采用正整数,指定要传递的最大文档数。

$skip采用一个正整数,指定要跳过的最大文档数。

之前有类似的问题,请查看答案here以及更详细的教程here

希望有所帮助!

答案 1 :(得分:0)

我想你想要这样的东西:

  searchModul.find({ $text: { $search: title }}).skip(50).limit(50).exec(function (err, output) {
    if (err) return handleError(err);
    res.render('search', { 
          title   : 'title',
          results  : output.results
    });
  });

这将返回匹配的第二个50项。 .skip(50)跳过的项数和.limit(50)是要返回的项数。

答案 2 :(得分:0)

const field = req.query.field;
const search = {};
search[field] = req.query.searchValue;
search["role"] = req.params._role;
search["status"] = parseInt(req.query.status);
user = await Users.paginate(search, {
    limit: parseInt(req.query.limit),
    page: parseInt(req.query.page),
});

var ObjectId = mongoose.Types.ObjectId;
let _id = new ObjectId(req.query.q);;
user = await Users.paginate(
{
    role: req.params._role,
    _id: _id,
},
{
    limit: parseInt(req.query.limit),
    page: parseInt(req.query.page),
});