2013-06-26 17 views
8

Come posso ottenere gli ultimi record N con meteors mongodb?get N ultimi record

So che potrei farlo in questo modo con normale mongodb: db.foo.find().sort({_id:1});, quindi ho pensato che questo avrebbe funzionato con meteora: collection.find({chatroom: Session.get("room")}, {sort: {_id:1}, limit: N }).

Ma questo restituisce solo alcuni documenti "casuali". Immagino che siano i 10 record con il valore _id più basso, come _id = aaaaa e _id = aaaab.

Cosa mi manca qui? Nel normale mongodb è il suo superlativo ?!

+0

o si può avere un campo come timestamp quindi ordinare dal timestamp – crapthings

+0

sì, ma che shouldnt essere necessario con MongoDB perché posso ottenerlo dal _id? – tobbe

risposta

9

Provare a utilizzare $natural specificatore di ordinamento di mongoDB.

collection.find({chatroom: Session.get("room")}, {sort: {$natural : 1}, limit: N }); 

L'ordine naturale è un ordine in cui gli archivi di database documenti su disco. Tipicamente un ordine di inserzione.

Io uso il valore date_created per l'ordinamento normalmente. Perché l'ordine naturale cambia a volte, quando si eseguono operazioni update su documenti esistenti.

+0

ah ok, malato crea un date_created invece di allora. Grande spiegazione perché! – tobbe

+1

posso fare ancora una domanda? :) Ora, se io li ordinare e li rendono finiscono in questo modo: (in alto) ultimo nuovo vecchio più antica (in basso) .. ma io voglio l'ordine inverso in modo che i nuovi spettacoli in basso , Come lo posso fare? Ive ha provato a utilizzare sia date_created: 1 e -1 con limit (10). Ma quando si usa "1" vedo solo i 10 più vecchi: / – tobbe

4

Sono rimasto bloccato anche al limite (penso che sia un bug di Meteor). Ho finito per scrivere questa funzione:

Template.content.messages = function() { 
    var items = Messages.find({}, {sort: {timestamp : 1} }).fetch(); 
    return items.slice(-15); 
} 

campo timestamp è definita in questo modo:

timestamp: new Date().getTime() 
Problemi correlati