Saya tidak dapat menemukan di mana pun ia telah mendokumentasikan ini. Secara default, operasi find () akan mendapatkan catatan dari awal. Bagaimana saya bisa mendapatkan catatan N terakhir di mongodb?
Sunting: juga saya ingin hasil yang dikembalikan dipesan dari yang terbaru ke yang terbaru, bukan sebaliknya.
Jawaban:
Jika saya mengerti pertanyaan Anda, Anda perlu mengurutkan dalam urutan naik.
Dengan asumsi Anda memiliki beberapa id atau bidang tanggal yang disebut "x", Anda akan melakukannya ...
.menyortir()
The 1 akan menyortir naik (yang terlama ke terbaru) dan -1 semacam akan turun (terbaru ke terlama.)
Jika Anda menggunakan bidang _id yang dibuat secara otomatis, ia memiliki tanggal yang tertanam di dalamnya ... sehingga Anda dapat menggunakannya untuk memesan dengan ...
Itu akan mengembalikan semua dokumen Anda yang diurutkan dari yang tertua ke yang terbaru.
Tatanan Alam
Anda juga dapat menggunakan Pesanan Alami yang disebutkan di atas ...
Sekali lagi, menggunakan 1 atau -1 tergantung pada urutan yang Anda inginkan.
Gunakan .limit ()
Terakhir, praktik yang baik untuk menambahkan batas saat melakukan kueri terbuka lebar semacam ini sehingga Anda bisa melakukan ...
atau
sumber
item = 3; item.add(3).divide(3) == 2; item.divide(3).add(3) == 4;
Tanpa urutan apa hasilnya nanti ??? Saya setuju dengan Anda bahwa pesanan terbalik ini tidak intuitif. Bagaimanapun, ini bukan SQL, harus mengikuti paradigma OO normal.Catatan terakhir yang ditambahkan N , dari yang terbaru ke yang terbaru, dapat dilihat dengan kueri ini:
Jika Anda menginginkannya dengan urutan terbalik:
Jika Anda menginstal Mongo-Hacker Anda juga dapat menggunakan:
Jika Anda bosan menulis perintah ini setiap saat, Anda dapat membuat fungsi khusus di ~ / .mongorc.js Anda. Misalnya
lalu dari jenis mongo shell saja
last(N)
sumber
db.collection.find().reverse().limit(1)
memberi saya kesalahan... has no method reverse
Untuk mendapatkan catatan N terakhir, Anda dapat menjalankan kueri di bawah ini:
jika Anda hanya menginginkan satu catatan terakhir:
Catatan: Sebagai pengganti $ natural Anda dapat menggunakan salah satu kolom dari koleksi Anda.
sumber
Anda dapat menggunakan
sort()
,limit()
,skip()
untuk mendapatkan N terakhir record mulai dari setiap nilai dilewatisumber
Anda dapat mencoba metode ini:
Dapatkan total jumlah catatan dalam koleksi
Kemudian gunakan lewati:
sumber
Lihat di bawah Querying: Sorting and Natural Order, http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order serta sort () di bawah Metode Kursor http://www.mongodb.org/display / DOCS / Advanced + Queries
sumber
Anda tidak dapat "melewati" berdasarkan ukuran koleksi, karena itu tidak akan mempertimbangkan kondisi kueri.
Solusi yang benar adalah menyortir dari titik akhir yang diinginkan, membatasi ukuran set hasil, kemudian menyesuaikan urutan hasil jika perlu.
Berikut ini sebuah contoh, berdasarkan kode dunia nyata.
sumber
var query = collection.find( { conditions } ).sort({$natural : -1}).reverse().limit(N)
.@ bin-chen,
Anda dapat menggunakan agregasi untuk entri n terbaru dari subset dokumen dalam koleksi. Berikut ini contoh sederhana tanpa pengelompokan (yang akan Anda lakukan antara tahap 4 dan 5 dalam kasus ini).
Ini mengembalikan 20 entri terbaru (berdasarkan bidang yang disebut "cap waktu"), diurutkan naik. Itu kemudian memproyeksikan setiap dokumen _id, cap waktu dan apa pun_field_you_want_to_show ke hasil.
jadi, hasilnya akan terlihat seperti:
Semoga ini membantu.
sumber
Menyortir, melompati dan sebagainya bisa sangat lambat tergantung pada ukuran koleksi Anda.
Kinerja yang lebih baik akan dicapai jika koleksi Anda diindeks oleh beberapa kriteria; dan kemudian Anda bisa menggunakan kursor min ():
Pertama, indeks koleksi Anda dengan
db.collectionName.setIndex( yourIndex )
Anda Anda dapat menggunakan urutan naik atau turun, yang keren, karena Anda ingin selalu "N item terakhir" ... jadi jika Anda mengindeks dengan urutan menurun, itu sama dengan mendapatkan "item N pertama" .Kemudian Anda menemukan item pertama dari koleksi Anda dan menggunakan nilai bidang indeksnya sebagai kriteria min dalam pencarian seperti:
Inilah referensi untuk kursor min (): https://docs.mongodb.com/manual/reference/method/cursor.min/
sumber
db.collectionName.find().hint(yourIndex).limit(N)
Jika indeks dalam urutan turun Anda mendapatkan nilai minimum N.Anda mungkin ingin menggunakan
find
opsi: http://docs.meteor.com/api/collections.html#Mongo-Collection-findsumber
menurut Dokumentasi mongoDB :
sumber
gunakan operator $ slice untuk membatasi elemen array
di mana geolokasi adalah array data, dari situ kita mendapatkan 5 record terakhir.
sumber
Fungsi terakhir seharusnya
sort
, bukanlimit
.Contoh:
sumber
sort
setelah itulimit
?