Visiem MongoDB kolekcijas dokumentiem ir dublēta primārā atslēga _id
. Šis lauks tiek automātiski piešķirts dokumentam pēc ievietošanas, tāpēc reti ir nepieciešams to iesniegt. Kas ir interesants _id
lauks ir tāds, ka ir atkarībā no laika. Tas ir, pamatā esošais veids _id
, kurš ir ObjectId
, ir 12 baitu BSON tips, un 4 no šiem baitiem atspoguļo sekundes kopš Unix laikmeta.
Kas ir arī īpašs _id
lauks ir tāds, ka tas tiek automātiski indeksēts, kā jūs varat redzēt zemāk, zvanot getIndexes
par jebkuru kolekciju.
|
|
Un kā visi atceras no tradicionālajām RDBMS, indeksi ir svarīgi, jo tie var padarīt dokumentu izguvi ātrāku; tomēr indeksi patērē atmiņu, un, ievietojot dokumentus, tiek piemērots neliels izpildes sods, jo visi atbilstošie indeksi ir jāatjaunina. Tādējādi, lai gan jums vajadzētu nopietni apsvērt iespēju izmantot indeksus, to lietošanai jābūt ekonomiskam.
Protams, meklējot pēc dokumenta _id
ir ērti tikai tad, kad jūs zināt to. Biežāk dokumenti tiek meklēti citos laukos, un, ja jūs meklējat, izmantojot laika rindas, piemēram, izveidots_at
tad jūs gaida kārums.
Iedomājieties kolekciju, kas dublēta baļķi
kas satur vienkāršus dokumentus, kas uztver dažādus žurnāla ziņojumus. Dokumenta paraugs varētu izskatīties šādi:
|
|
Ko darīt, ja es gribētu atrast visus žurnāla ziņojumus kādam datumam, piemēram, šodien? Es varētu uzrakstīt savu vaicājumu šādi:
|
|
Ja es izskaidroju šo vaicājumu, es to redzu, jo man nav ieslēgta indeksa izveidots_at
, tiek izmantots pamata kursors, un visi kolekcijas dokumenti tika skenēti, lai izgūtu manu rezultātu.
|
|
Kā redzat, meklēšana, izmantojot izveidots_at
lauks var būt neefektīvs; tādējādi jums varētu rasties kārdinājums mest rādītāju šajā laukā. Tas, protams, padarīs šo konkrēto vaicājumu efektīvāku, tomēr jums radīsies izmaksas par jaunu indeksu, kas patērē vairāk atmiņas, un ieliktņi būtu nedaudz lēnāki, pateicoties jaunizveidotā indeksa atjauninājumam.
Kā izrādās, jo _id
lauks tajā iekļauj Unix laikmetu, jūs varat tikpat viegli izveidot atraduma izteiksmi bez ieskaitot izveidots_at
laukā. Piemēram, MongoDB Ruby draiveris ļauj jums izveidot ObjectId
’S no a Laiks
tāpat kā: