Chcę poznać najnowszy rekord w kolekcji. Jak to zrobić?
Uwaga: wiem, że działają następujące zapytania w wierszu poleceń:
1. db.test.find().sort({"idate":-1}).limit(1).forEach(printjson);
2. db.test.find().skip(db.test.count()-1).forEach(printjson)
gdzie idate ma dodany znacznik czasu.
Problem polega na tym, że dłużej zbieranie danych to czas na odzyskanie danych, a moja kolekcja „testowa” jest naprawdę ogromna. Potrzebuję zapytania ze stałą odpowiedzią czasową.
Jeśli jest jakieś lepsze zapytanie wiersza poleceń mongodb, daj mi znać.
mongodb
mongodb-query
inkriti
źródło
źródło
db.collection.find().limit(1).sort({$natural:-1}).pretty()
jeśli chcesz, żeby wyglądało ładniedb.collection.find().sort({$natural:-1}).limit(1).pretty()
Query failed with error code 303 and error message 'option $natural is not supported' on server docdb
. Mam nadzieję, że ta funkcja pojawi się wkrótce.To da ci ostatni dokument dla
collection
$natural:-1
oznacza kolejność odwrotną do tej, do której wstawiane są rekordy.Edycja : dla wszystkich downvoters powyżej jest składnia Mongoose, składnia mongo CLI to:
db.collectionName.find({}).sort({$natural:-1}).limit(1)
źródło
Domyślnie indeksy w MongoDB to B-drzewa. Przeszukiwanie B-Tree jest operacją O (logN), więc nawet
find({_id:...})
nie zapewni stałego czasu, odpowiedzi O (1).To powiedziawszy, możesz również sortować według,
_id
jeśli używaszObjectId
dla siebie identyfikatorów. Zobacz tutaj, aby uzyskać szczegółowe informacje . Oczywiście nawet to jest dobre tylko do ostatniej sekundy.Możesz uciec się do „pisania dwa razy”. Napisz raz do kolekcji głównej i napisz ponownie do kolekcji „ostatnio zaktualizowanej”. Bez transakcji nie będzie to idealne, ale mając tylko jedną pozycję w kolekcji „ostatnio zaktualizowanej”, zawsze będzie to szybkie.
źródło
Jeszcze inny sposób na uzyskanie ostatniego elementu z kolekcji MongoDB (nie przejmuj się przykładami):
Projekcja normalna
Rzutowanie sortowane (_id: odwrotna kolejność)
sort({'_id':-1})
, definiuje odwzorowanie w porządku malejącym wszystkich dokumentów na podstawie ich plików_id
s.Sorted Projection (_id: reverse order): pobieranie najnowszego (ostatniego) dokumentu z kolekcji.
źródło
php7.1 mongoDB:
$data = $collection->findOne([],['sort' => ['_id' => -1],'projection' => ['_id' => 1]]);
źródło
Moje rozwiązanie:
db.collection("name of collection").find({}, {limit: 1}).sort({$natural: -1})
źródło
Jeśli korzystasz z automatycznie generowanych identyfikatorów obiektów Mongo w swoim dokumencie, zawiera on znacznik czasu jako pierwsze 4 bajty, na podstawie którego można znaleźć najnowszy dokument wstawiony do kolekcji. Rozumiem, że to stare pytanie, ale jeśli ktoś jeszcze tu ląduje, szuka jeszcze jednej alternatywy.
Powyższe zapytanie dałoby _id dla najnowszego dokumentu wstawionego do kolekcji
źródło
W ten sposób można pobrać ostatni rekord ze wszystkich dokumentów MongoDB z kolekcji „foo”. (Zmień foo, x, y .. itd.)
możesz dodawać lub usuwać z grupy
artykuły pomocy: https://docs.mongodb.com/manual/reference/operator/aggregation/group/#pipe._S_group
https://docs.mongodb.com/manual/reference/operator/aggregation/last/
źródło