如何使用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)
一些事情:
- 如果你不使用mongodb的
ObjectId
上面的代码不会为你工作,但是你仍然可以使用postDate
而不是id和当前的postDate而不是curId
。 - 当获得下一个/上一个post时,要小心顺序,检索下一个post,你需要sortingasc,检索上一篇文章,你需要sortingdesc。
- 我不熟悉mongoose,所以上面的脚本是mongodb shell脚本。
查找上一个项目:
Post.findOne({_id: {$lt: curId}}).sort({_id: -1}).exec(cb)
查找下一个项目:
Post.findOne({_id: {$gt: curId}}).sort({_id: 1}).exec(cb)