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

Alf*_*red 9 javascript mongoose mongodb node.js express

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

我如何用Mongoose最简单的方法呢?

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

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

架构看起来像这样:

PostSchema = new Schema(
  title:
    type: String
    required: true
    index: true
  preamble: String
  body: String
  slug: String
  createdAt: Date
  updatedAt: Date
)
Run Code Online (Sandbox Code Playgroud)

And*_*ich 16

所以假设你有这样的架构:

{
 _id,
 text    
}
Run Code Online (Sandbox Code Playgroud)

我想_id是mongo ObjectId,所以我们它包含发布日期,我可以对它进行排序

让我们考虑我已经打开id等于的当前帖子ObjectId( "43cc63093475061e3d95369d")(而不是我将使用的curId),我需要知道下一个和之前的.还可以考虑我们需要按创建日期降序逐个获取所有帖子:

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

db.posts.find({_id: {$gt: curId}}).sort({_id: 1 }).limit(1)
Run Code Online (Sandbox Code Playgroud)

获取上一篇文章你可以这样:

db.posts.find({_id: {$lt: curId}}).sort({_id: -1 }).limit(1)
Run Code Online (Sandbox Code Playgroud)

一些事情:

  1. 如果你不使用ObjectId上面的mongodb 代码将无法为你工作,但你仍然可以使用postDate而不是id和当前发布postDate而不是curId.
  2. 获得下一个/上一篇文章时要小心订单,要检索下一篇文章,你需要排序asc,检索你需要排序desc的上一篇文章.
  3. 我不熟悉mongoose,所以上面的脚本是mongodb shell脚本.


小智 6

查找上一项:

Post.findOne({_id: {$lt: curId}}).sort({_id: -1}).exec(cb)
Run Code Online (Sandbox Code Playgroud)

查找下一项:

Post.findOne({_id: {$gt: curId}}).sort({_id: 1}).exec(cb)
Run Code Online (Sandbox Code Playgroud)