2013-06-26 14 views
8

Jak uzyskać najnowsze N ​​rekordów z meteorami mongodb?pobierz N najnowsze zapisy

Wiem, że mogłem zrobić to tak z normalnym mongodb: db.foo.find().sort({_id:1});, więc pomyślałem, że to zadziała z meteorytem: collection.find({chatroom: Session.get("room")}, {sort: {_id:1}, limit: N }).

Ale to tylko zwraca niektóre "losowe" dokumenty. Sądzę, że są to 10 rekordów o najniższej wartości _id, takich jak _id = aaaa i _id = aaaab.

Czego mi tu brakuje? W normalnych mongodach jest super ?!

+0

lub może masz pole jak datownik następnie sortować według swojej datownik – crapthings

+0

Tak, ale to nie powinno być konieczne z MongoDB bo mogę to dostać od _id? – tobbe

Odpowiedz

9

Spróbuj użyć spekulatora sortowania mongoDB w wersji $natural.

Porządek naturalny to kolejność, w której baza danych przechowuje dokumenty na dysku. Zazwyczaj zamówienie reklamowe.

Używam wartości date_created do sortowania normalnie. Ponieważ porządek naturalny zmienia się czasami, podczas wykonywania operacji na istniejących dokumentach.

+0

ah ok, zrób zamiast tego polecenie date_created. Świetne wyjaśnienie, dlaczego! – tobbe

+1

Czy mogę zadać jeszcze jedno pytanie? :) Teraz gdybym sortować je i czynią je kończy się tak: (u góry) Ostatnio nowy stary najstarszy (na dole) .. ale chcę w odwrotnej kolejności, tak aby najnowsze pokazy na dole , jak mogę to zrobić? Ive próbował używać zarówno date_created: 1 i -1 z limitem (10). Ale przy użyciu "1" widzę tylko 10 najstarszych: / – tobbe

4

Utknąłem także na limicie (uważam, że to błąd Meteora). Skończyło się pisząc tę ​​funkcję:

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

Datownik pole jest zdefiniowany następująco:

timestamp: new Date().getTime() 
Powiązane problemy