Uzyskaj ostatnie dokumenty z odrębnymi kryteriami

Sytuacja

Mam problem z wymyśleniem dobrego sposobu wykonania pewnego zapytania MongoDb. Po pierwsze, oto jakie zapytanie chcę zrobić. Załóż prostą bazę danych, która rejestruje zdarzenia wejścia i wyjścia (i ewentualnie inne działania, nie ma znaczenia) za pomocą machnięcia karty elektronicznej. Jest więc kolekcja o nazwieswipelog z prostymi dokumentami, które wyglądają tak:

{
    _id: ObjectId("524ab4790a4c0e402200052c")
    name: "John Doe", 
    action: "entry",
    timestamp: ISODate("2013-10-01T1:32:12.112Z") 
}

Teraz chcę wymienić nazwy i ich ostatnie czasy wprowadzania (i inne pola, które chcę, ale przykład poniżej używa tylko tych dwóch pól).

Aktualne rozwiązanie

Oto, co mam teraz, jako „jeden liner” dla konsoli JavaScript MongoDb:

db.swipelog.distinct('name')
           .forEach( function(name) {

    db.swipelog.find( { name: name, action:"entry" } )
               .sort( { $natural:-1 } )
               .limit(1)
               .forEach( function(entry) {

        printjson( [ entry.name, entry.timestamp ] )
    }) 
})

Który drukuje coś w stylu:

[ "John Doe", ISODate("2013-10-01T1:32:12.112Z")]
[ "Jane Deo", ISODate("2013-10-01T1:36:12.112Z")]
...
Pytanie

Myślę, że powyższe ma oczywisty problem skalowania. Jeśli istnieje sto nazw, do bazy danych zostanie wysłane 1 + 100 zapytań. Więc jaki jest dobry / poprawny sposób na uzyskanie „ostatniego”timestamp każdego odrębnegoname„? Zmiana struktury bazy danych lub dodanie niektórych kolekcji jest w porządku, jeśli to ułatwia.

questionAnswers(2)

yourAnswerToTheQuestion