2012-02-05 25 views
7

Tôi có một blog. Trên trang đăng bài cá nhân tôi muốn hiển thị một liên kết đến trang trước đó và nếu có, bài đăng tiếp theo được xuất bản ở dưới cùng. Liên kết phải là tiêu đề của bài đăng cụ thể.Cách lấy mục tiếp theo và trước đó của mục hiện tại bằng Mongoose

Làm cách nào để làm điều đó một cách đơn giản nhất với Mongoose?

điều khiển hiện tại của tôi trông như thế này:

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

Và schema trông như thế này:

PostSchema = new Schema(
    title: 
    type: String 
    required: true 
    index: true 
    preamble: String 
    body: String 
    slug: String 
    createdAt: Date 
    updatedAt: Date 
) 
+0

vui lòng cung cấp thông tin về sơ đồ của bạn, vì vậy chúng tôi có thể giúp bạn. MongoDB không có cấu trúc và do đó bạn không thể chỉ nhận được "cái tiếp theo". Bạn sẽ cần một số phân loại của một trường, để phát hiện những gì là "trước" và whats "sau" – japrescott

+0

Cập nhật với lược đồ ở trên. Đoán bạn có thể sử dụng ngày bằng cách nào đó? – Alfred

Trả lời

14

Vì vậy, hãy giả sử bạn có schema như thế này:

{ 
_id, 
text  
} 

Tôi cho rằng rằng _id là mongo ObjectId, vì vậy chúng tôi chứa ngày đăng bài và tôi có thể sắp xếp trên đó

Cho phép xem xét rằng tôi đã mở bài đăng hiện tại có id bằng ObjectId("43cc63093475061e3d95369d") (thay vì điều này tôi sẽ sử dụng curId) và tôi cần phải biết tiếp theo và trước đó. Cũng cho phép xem xét rằng chúng ta cần phải nhận được tất cả bài viết từng người một ra lệnh bằng cách tạo ra ngày giảm dần:

Nhận bài tiếp theo bạn có thể như thế này:

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

Nhận bài trước bạn có thể như thế này:

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

vài điều:

  1. Nếu bạn không sử dụng MongoDB ObjectId trên mã sẽ không làm việc cho bạn, nhưng y Bạn vẫn có thể sử dụng postDate thay vì id và bài đăng hiện tại postDate thay vì curId.
  2. Hãy quan tâm đến trật tự khi nhận bài tiếp theo/trước, để truy xuất bài tiếp theo bạn cần sắp xếp asc, để truy xuất bài đăng trước, bạn cần sắp xếp desc.
  3. Tôi không quen thuộc với mongoose, vì vậy các tập lệnh trên là các tập lệnh shell mongodb.
0

Tìm mục trước:

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

Tìm mục tiếp theo:

Post.findOne({_id: {$gt: curId}}).sort({_id: 1}).exec(cb) 
Các vấn đề liên quan