2012-02-05 7 views
7

Ho un blog. Nella singola pagina del post voglio visualizzare un collegamento al precedente e, se ce n'è uno, il prossimo post pubblicato in basso. Il link dovrebbe essere il titolo del post specifico.Come recuperare l'articolo successivo e precedente di quello corrente con Mongoose

Come faccio a farlo nel modo più semplice con Mongoose?

mio regolatore di corrente si presenta così:

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

e lo schema è simile al seguente:

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

si prega di specificare lo schema, in modo che possiamo aiutarvi. MongoDB non è strutturato e quindi non puoi semplicemente ottenere il "prossimo". Avrai bisogno di un certo ordinamento di un campo, per rilevare cosa era "prima" e che cosa è "dopo" – japrescott

+0

aggiornato con lo schema sopra. Suppongo che potresti usare la data in qualche modo? – Alfred

risposta

14

Quindi cerchiamo si supponga di avere lo schema come questo:

{ 
_id, 
text  
} 

suppongo che _id è mongo ObjectId, quindi contiene post date e posso ordinarlo

Si consideri che ho aperto il post corrente con id uguale a ObjectId("43cc63093475061e3d95369d") (invece di questo userò curId) e ho bisogno di conoscere il prossimo e il precedente. Inoltre permette di considerare che abbiamo bisogno di ottenere tutti i messaggi uno ad uno in ordine di data di creazione discendente:

Get prossimo post si può, come questo:

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

Get precedente post potete in questo modo:

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

Poche cose:

  1. Se non si utilizza mongodb ObjectId sopra codice non funziona per voi, ma y Puoi ancora usare postDate invece di id e corrente post postDate invece di curId.
  2. Prenditi cura di ordine per ottenere i post next/prev, per recuperare il post successivo hai bisogno di sort asc, per recuperare i post precedenti hai bisogno di ordinare desc.
  3. Non ho dimestichezza con mangusta, quindi gli script di sopra sono script di shell mongodb.
0

Trova precedente Articolo:

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

Trova successivo articolo:

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