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

Posted

技术标签:

【中文标题】如何使用 Mongoose 获取当前项的下一项和上一项【英文标题】:How to fetch next and previous item of the current one with Mongoose 【发布时间】:2012-02-27 12:39:46 【问题描述】:

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

如何使用 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
)

【问题讨论】:

请提供有关您的架构的信息,以便我们为您提供帮助。 MongoDB 是非结构化的,因此您不能只获得“下一个”。您需要对字段进行一些排序,以检测“之前”和“之后”的内容 已更新为上述架构。猜猜你能以某种方式使用日期? 【参考方案1】:

假设你有这样的架构:


 _id,
 text    

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

假设我打开了当前帖子,id 等于ObjectId( "43cc63093475061e3d95369d")(而不是这个我将使用curId),我需要知道下一个和上一个。还让我们考虑一下,我们需要按创建日期降序逐一获取所有帖子:

获取下一个帖子,你可以这样:

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

获取以前的帖子你可以这样:

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

几件事:

    如果你不使用 mongodb ObjectId 上面的代码对你不起作用,但你仍然可以使用 postDate 代替 id 和当前帖子 postDate 代替 curId。 在获取下一篇/上一篇文章时要注意顺序,要检索下一篇文章需要按 asc 排序,要检索上一篇文章需要按降序排序。 我对mongoose不熟悉,所以上面的脚本是mongodb shell脚本。

【讨论】:

【参考方案2】:

查找上一个项目:

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

查找下一项:

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

【讨论】:

以上是关于如何使用 Mongoose 获取当前项的下一项和上一项的主要内容,如果未能解决你的问题,请参考以下文章

根据前一项的ID获取数组中的下一项[关闭]

获取循环中的下一项

如何从数据库c#中创建多年的下一个和上一个按钮

Ruby on Rails:获取模型中的下一项

Javascript:通用获取数组中的下一项

如何默认选择第一项,然后在角度 6 中突出显示选定的下一项 json 数据