2012-02-05 45 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) 
相關問題