如何使用Mongoose获取当前项目的下一个和前一个项目

我有一个博客。 在单个post页面上我想显示一个链接到前一个,如果有的话,下一个post发布在底部。 链接应该是特定post的标题。

我如何做到这一点与mongoose最简单的方法?

我目前的控制器看起来像这样:

Post.findOne { slug : req.params.slug }, (err, post) -> res.render "blog/show.jade", locals: title: "This post", post: post 

模式如下所示:

 PostSchema = new Schema( title: type: String required: true index: true preamble: String body: String slug: String createdAt: Date updatedAt: Date ) 

所以假设你有这样的模式:

 { _id, text } 

我想_id是mongo ObjectId,所以我们它包含发布date,我可以sorting它

让我们考虑一下,我已经打开当前职位id等于ObjectId( "43cc63093475061e3d95369d") (而不是我将使用curId ),我需要知道下一个和以前。 还可以考虑我们需要通过创builddate降序来逐一获取所有文章:

获取下一篇文章,你可以这样做:

 db.posts.find({_id: {$gt: curId}}).sort({_id: 1 }).limit(1) 

获取以前的post,你可以这样做:

 db.posts.find({_id: {$lt: curId}}).sort({_id: -1 }).limit(1) 

一些事情:

  1. 如果你不使用mongodb的ObjectId上面的代码不会为你工作,但是你仍然可以使用postDate而不是id和当前的postDate而不是curId
  2. 当获得下一个/上一个post时,要小心顺序,检索下一个post,你需要sortingasc,检索上一篇文章,你需要sortingdesc。
  3. 我不熟悉mongoose,所以上面的脚本是mongodb shell脚本。

查找上一个项目:

 Post.findOne({_id: {$lt: curId}}).sort({_id: -1}).exec(cb) 

查找下一个项目:

 Post.findOne({_id: {$gt: curId}}).sort({_id: 1}).exec(cb)