2012-02-05 16 views
7

Tengo un blog. En la página de publicación individual, quiero mostrar un enlace al anterior, y si hay uno, la próxima publicación publicada en la parte inferior. El enlace debe ser el título de la publicación específica.Cómo recuperar el artículo siguiente y anterior del actual con Mongoose

¿Cómo hago eso de la manera más simple con Mongoose?

Mi controlador de corriente se ve así:

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

y el esquema es el siguiente:

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

, facilite información sobre el esquema, para que podamos ayudarle. MongoDB no está estructurado y por lo tanto no puedes obtener el "próximo". Necesitará ordenar un campo para detectar qué era "antes" y qué es "después" de – japrescott

+0

actualizado con el esquema anterior. ¿Adivina que podrías usar la fecha de alguna manera? – Alfred

Respuesta

14

Así que supongamos que tiene esquema de la siguiente manera:

{ 
_id, 
text  
} 

supongo ese _id es mongo ObjectId, por lo que contiene la fecha de publicación y puedo ordenarlo

Consideremos que he abierto la publicación actual con ID igual a ObjectId("43cc63093475061e3d95369d") (en lugar de esto voy a usar curId) y necesito saber la siguiente y anterior. También vamos a considerar que es necesario obtener todos los mensajes de uno en uno por fecha creada descendente:

Obtener próximo post que le gusten esto:

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

Obtener post anterior puede desea:

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

Pocas cosas:

  1. Si no se utiliza mongodb ObjectId anterior código no funcionará para usted, pero Y Todavía puede usar postDate en lugar de la id y la publicación actual postDate en lugar de curId.
  2. Cuide el orden al obtener las publicaciones siguiente/anterior, para recuperar la próxima publicación necesita ordenar asc, para recuperar la publicación previa necesita ordenar desc.
  3. No estoy familiarizado con la mangosta, por lo tanto, las secuencias de comandos anteriores son guiones de shell mongodb.
0

Encuentra elemento anterior:

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

Buscar siguiente material:

Post.findOne({_id: {$gt: curId}}).sort({_id: 1}).exec(cb) 
Cuestiones relacionadas