2012-12-19 13 views
54

Sto lavorando al mio primo progetto usando Meteor e sto avendo qualche difficoltà con l'ordinamento.Come posso ordinare una collezione Meteor al momento dell'inserimento?

Ho un modulo in cui gli utenti immettono aforismi che vengono quindi visualizzati in un elenco. Attualmente gli aforismi più recenti vengono visualizzati automaticamente nella parte inferiore dell'elenco. Esiste un modo semplice per far apparire i più recenti in cima alla lista?

ho provato:

Template.list.aphorisms = function() { 
    return Aphorisms.find({}, {sort: {$natural:1}}); 
}; 

e sono sconcertato perché la documentazione Meteor non hanno molti esempi.

+0

Si può sempre aggiungere un attributo 'date_created' e ordinare per quello. – knownasilya

+0

Com'è la tua collezione? – muruga

+0

Ho aggiunto un attributo date_created ... speravo con MongoDB che non avrei dovuto farlo, però ... – squeezemylime

risposta

99

Supponendo che la date_created è in un formato data valida insieme al timestamp, si dovrebbe inserire il valore analizzato di date_created usando Date.parse() funzione javascript, che dà il numero di millisecondi tra il 1 gennaio 1970 e il valore di data contenuta nel date_created.

Come risultato, il record aggiunto più recente conterrà un valore maggiore di date_created rispetto al record inserito prima.

Ora, quando va a prendere i record, ordinare il cursore al fine del parametro date_created scendere come:

Aphorisms.find({}, {sort: {date_created: -1}}); 

Ciò ordinare i record dal più recente al più vecchio.

Spero che questo aiuti.

+0

Questo funziona molto bene ... l'unico modo in cui sono attualmente in grado di memorizzare la data in un modo che funziona è: var combinedTime = year + "" + day + "" + mese + "" + ora + "" + minuto + "" + secondi; – squeezemylime

+0

Sì, assicurati che l'attributo 'date_created' contenga anche un timestamp valido. Dal momento che questo non funzionerà solo con 'date + month + year'. –

+1

Per ordinare le date sul lato client in minimongo, la data deve essere memorizzata come una stringa, come il formato ISO8601. Minimongo non sa come ordinare i tipi Data. Vedere il testo in rosso sotto http://docs.meteor.com/#collections –

8

ho trovato quanto segue per essere una soluzione più pulita:

Template.list.aphorisms = function() { 
     return Aphorisms.find().fetch().reverse(); 
    }; 

Dato che intera collezione già esistente in ordine inverso che si desidera, si può semplicemente creare un array di tutti gli oggetti e retromarcia l'ordine.

+3

Non sono sicuro che tu possa realmente contare su Mongo per mantenere in ordine i tuoi articoli. In teoria, sì, funziona - ma per quanto ne so, questo non è sempre un presupposto sicuro. – j6m8

+2

Questa è la soluzione più sicura. MongoDB crea automaticamente un campo Creato per default in Meteor. Quindi, quando si effettuano query di grandi dimensioni questa è in realtà la soluzione più sicura e più pulita. – TheBetterJORT

+2

Ciao, il campo 'createdAt' non viene creato automaticamente (forse era al momento del tuo commento, però, io uso 1.4.2).Devi gestirlo da solo, solitamente grazie al pacchetto 'aldeed: collection2'. Non sono sicuro del motivo per cui questo non è il comportamento predefinito, come con la mangusta o altre lingue. –

Problemi correlati