Saya ingin mengetahui rekor terbaru dalam sebuah koleksi. Bagaimana cara melakukannya?
Catatan: Saya tahu kueri baris perintah berikut berfungsi:
1. db.test.find().sort({"idate":-1}).limit(1).forEach(printjson);
2. db.test.find().skip(db.test.count()-1).forEach(printjson)
di mana idate memiliki stempel waktu ditambahkan.
Masalahnya adalah semakin lama koleksi tersebut adalah waktu untuk mendapatkan kembali data dan koleksi 'tes' saya sangat besar. Saya butuh pertanyaan dengan respons waktu yang konstan.
Jika ada permintaan baris perintah mongodb yang lebih baik, beri tahu saya.
mongodb
mongodb-query
inkriti
sumber
sumber
db.collection.find().limit(1).sort({$natural:-1}).pretty()
jika Anda ingin terlihat bagusdb.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
. Semoga fitur itu segera hadir.Ini akan memberi Anda satu dokumen terakhir untuk a
collection
$natural:-1
berarti urutan kebalikan dari yang record dimasukkan.Sunting : Untuk semua downvoters, di atas adalah sintaks Mongoose, sintaks mongo CLI adalah:
db.collectionName.find({}).sort({$natural:-1}).limit(1)
sumber
Secara default, indeks di MongoDB adalah B-Trees. Pencarian B-Tree adalah operasi O (logN), jadi bahkan
find({_id:...})
tidak akan memberikan respon waktu, O (1) konstan.Yang menyatakan, Anda juga dapat mengurutkan berdasarkan
_id
jika Anda menggunakanObjectId
untuk Anda ID. Lihat di sini untuk detailnya . Tentu saja, bahkan itu hanya bagus sampai detik terakhir.Anda mungkin menggunakan "menulis dua kali". Tulis sekali ke koleksi utama dan tulis lagi ke koleksi "terakhir diperbarui". Tanpa transaksi, ini tidak akan sempurna, tetapi hanya dengan satu item dalam koleksi "terakhir diperbarui", ini akan selalu cepat.
sumber
Cara lain untuk mendapatkan item terakhir dari Koleksi MongoDB (jangan pedulikan contohnya):
Proyeksi Normal
Proyeksi yang Diurutkan (_id: urutan terbalik)
sort({'_id':-1})
, mendefinisikan proyeksi dalam urutan menurun dari semua dokumen, berdasarkan_id
s.Proyeksi yang Diurutkan (_id: urutan terbalik): mendapatkan dokumen terbaru (terakhir) dari koleksi.
sumber
php7.1 mongoDB:
$data = $collection->findOne([],['sort' => ['_id' => -1],'projection' => ['_id' => 1]]);
sumber
Solusi Saya:
db.collection("name of collection").find({}, {limit: 1}).sort({$natural: -1})
sumber
Jika Anda menggunakan Id Objek Mongo yang dibuat secara otomatis di dokumen Anda, ini berisi stempel waktu di dalamnya karena 4 byte pertama yang menggunakan dokumen terbaru yang dimasukkan ke dalam koleksi dapat ditemukan. Saya mengerti ini adalah pertanyaan lama, tetapi jika seseorang masih berakhir di sini mencari satu alternatif lagi.
Kueri di atas akan memberikan _id untuk dokumen terbaru yang dimasukkan ke dalam koleksi
sumber
Ini adalah cara mendapatkan record terakhir dari semua dokumen MongoDB dari koleksi "foo". (Ubah foo, x, y .. dll.)
Anda dapat menambah atau menghapus dari grup
artikel bantuan: https://docs.mongodb.com/manual/reference/operator/aggregation/group/#pipe._S_group
https://docs.mongodb.com/manual/reference/operator/aggregation/last/
sumber