2012-02-05 43 views
7

我有一个博客。在单个帖子页面上,我想显示前一个链接,如果有,则在底部发布下一篇文章。该链接应该是特定帖子的标题。如何取用猫鼬的当前项目的下一个和前一个项目

我该如何做到最简单的方式与猫鼬?

我现在的控制器是这样的:

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 
) 
+0

请提供您的架构的信息,所以我们可以帮助你。 MongoDB是非结构化的,因此你不能只获得“下一个”。您需要对字段进行一些排序,以检测“ – japrescott 2012-02-05 21:48:40

+0

”之后的“之前”和“什么”。猜猜你可以以某种方式使用日期? – Alfred 2012-02-05 21:53:57

回答

14

因此,让我们假设你有模式是这样的:

{ 
_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) 

几件事情:

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

查找上一条:

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

查找下一个项目:

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