Visiems „MongoDB“ kolekcijos dokumentams suteikiamas pagrindinis raktas _id
. Šis laukas automatiškai priskiriamas dokumentui įterpiant, todėl retai kada reikia jo pateikti. Kas įdomu _id
sritis yra tokia pagal laiką. Tai yra pagrindinis tipas _id
, kuris yra ObjectId
, yra 12 baitų BSON tipas, o 4 iš šių baitų reiškia sekundes nuo „Unix“ epochos.
Kuo ypatingas ir „ _id
laukas yra tai, kad jis automatiškai indeksuojamas, kaip matote toliau paskambinę „getIndexes“
bet kurioje kolekcijoje.
|
|
Kaip visi prisimena iš tradicinių RDBMS, indeksai yra svarbūs, nes jie gali padėti greičiau gauti dokumentus; nepaisant to, indeksai išeikvoja atmintį ir įterpiant dokumentus taikoma nedidelė našumo bausmė, nes visi atitinkami indeksai turi būti atnaujinti. Taigi, nors turėtumėte rimtai apsvarstyti galimybę naudoti indeksus, turite būti ekonomiški juos naudodami.
Natūralu, kad ieškoma pagal dokumentą _id
yra patogu tik tada, kai tu žinoti tai. Dažniausiai dokumentų ieškoma kituose laukuose ir, jei jūs ieškote laiko juostų, pvz., sukurtas_at
tada tavęs laukia malonumas.
Įsivaizduokite kolekciją, dubliuotą rąstai
kuriame yra paprasti dokumentai, fiksuojantys įvairius žurnalo pranešimus. Dokumento pavyzdys gali atrodyti taip:
|
|
Ką daryti, jei norėčiau rasti visus tam tikros datos žurnalo pranešimus, pvz., Šiandien? Aš galėčiau parašyti savo užklausą taip:
|
|
Jei užmesiu šios užklausos paaiškinimą, tai galiu pamatyti, nes neturiu rodyklės sukurtas_at
, pagrindinis žymeklis yra sverto ir visi kolekcijos dokumentai buvo nuskaityti, norint gauti mano rezultatą.
|
|
Kaip matote, ieškokite per sukurtas_at
laukas gali būti neefektyvus; taigi gali kilti pagunda tame lauke mesti rodyklę. Tai natūraliai padarytų tą konkrečią užklausą efektyvesnę, tačiau turėtumėte sumokėti naują indeksą, kuris sunaudoja daugiau atminties, o įdėklai būtų šiek tiek lėtesni dėl to naujai sukurto indekso atnaujinimo.
Kaip paaiškėja, nes _id
laukas į ją įterpia „Unix“ epochą, taip pat lengvai galite sukurti radinio išraišką be įskaitant sukurtas_at
srityje. Pavyzdžiui, „MongoDB Ruby“ tvarkyklė leidžia kurti ObjectId
’S iš a Laikas
patinka taip: