Kekunci utama MongoDB adalah rakan anda
Semua dokumen dalam koleksi MongoDB mempunyai kunci utama yang dijuluki _id
. Medan ini diberikan secara automatik ke dokumen setelah disisipkan, jadi jarang ada keperluan untuk memberikannya. Apa yang menarik mengenai _id
bidang ini adalah berdasarkan masa . Iaitu, jenis yang mendasari _id
, iaitu ObjectId
, jenis BSON 12-byte, dan 4 bait tersebut mewakili detik sejak zaman Unix.
Apa yang istimewa dari _id
bidang ini ialah secara automatik diindeks seperti yang anda lihat di bawah dengan memanggil getIndexes
koleksi apa pun.
|
|
Dan seperti yang diingat oleh semua orang dari RDBMS tradisional, indeks penting kerana mereka dapat membuat pengambilan dokumen lebih cepat; namun demikian, indeks menggunakan memori dan ada sedikit hukuman prestasi semasa memasukkan dokumen kerana semua indeks yang sesuai mesti dikemas kini. Oleh itu, walaupun anda harus mempertimbangkan penggunaan indeks dengan serius, anda perlu menjimatkan penggunaannya.
Secara semula jadi, mencari melalui dokumen _id
hanya sesuai apabila anda mengetahuinya . Lebih kerap daripada tidak, dokumen dicari melalui bidang lain dan jika anda mencari melalui siri masa, seperti created_at
ketika anda mencari makanan.
Bayangkan koleksi dijuluki logs
yang mengandungi dokumen mudah menangkap pelbagai mesej log. Contoh dokumen seperti ini:
|
|
Bagaimana jika saya ingin mencari semua mesej log untuk beberapa tarikh, seperti hari ini? Saya boleh menulis pertanyaan saya seperti ini:
|
|
Sekiranya saya memberikan penjelasan untuk pertanyaan itu, saya dapat melihatnya kerana saya tidak mempunyai indeks created_at
, kursor asas dimanfaatkan dan semua dokumen dalam koleksi diimbas untuk mendapatkan hasil saya.
|
|
Seperti yang anda lihat, mencari melalui created_at
lapangan tidak berkesan; dengan demikian, anda mungkin tergoda untuk melemparkan indeks di bidang tersebut. Ini secara semula jadi menjadikan pertanyaan tertentu lebih efisien, namun, anda akan menanggung kos indeks baru yang lebih banyak memori yang digunakan dan sisipan akan sedikit lebih perlahan kerana kemas kini ke indeks yang baru dibuat.
Ternyata, kerana _id
bidang menyematkan zaman Unix di dalamnya, anda boleh membuat ungkapan penemuan dengan mudah tanpa memasukkan created_at
bidang. Sebagai contoh, pemacu Ruby MongoDB membolehkan anda membuat ObjectId
dari Time
seperti: