Kaikilla MongoDB-kokoelman asiakirjoilla on ensisijainen avain _id
. Tämä kenttä määritetään asiakirjalle automaattisesti lisäyksen yhteydessä, joten sitä on harvoin tarpeen antaa. Mikä on mielenkiintoista _id
kenttä on, että se on aikaan pohjautuva. Eli taustalla oleva tyyppi _id
, mikä on ObjectId
, on 12-tavuinen BSON-tyyppi, ja 4 näistä tavuista edustaa sekunteja Unix-aikakaudesta.
Mikä on myös erityistä _id
kenttä on, että se indeksoidaan automaattisesti, kuten näet alla soittamalla getIndexes
mistä tahansa kokoelmasta.
|
|
Ja kuten kaikki muistavat perinteisistä RDBMS-tiedostoista, hakemistot ovat tärkeitä, koska ne voivat nopeuttaa asiakirjojen hakua; hakemistot kuitenkin kuluttavat muistia, ja asiakirjojen lisäämisessä on pieni suoritussakko, koska kaikki vastaavat hakemistot on päivitettävä. Joten vaikka sinun pitäisi harkita vakavasti hakemistojen käyttöä, sinun on oltava taloudellinen niiden käytössä.
Luonnollisesti etsiminen asiakirjan perusteella _id
on kätevä vain, kun sinä tietää se. Useimmiten asiakirjoja haetaan muiden kenttien kautta ja jos huomaat etsivän esimerkiksi aikasarjojen kautta luotu_t
sitten olet hoidossa.
Kuvittele kokoelma, joka on kopioitu lokit
joka sisältää yksinkertaisia asiakirjoja, jotka sieppaavat erilaisia lokiviestejä. Esimerkkidokumentti voi näyttää tältä:
|
|
Entä jos halusin löytää kaikki lokiviestit tietylle päivälle, kuten tänään? Voisin kirjoittaa kyselyni näin:
|
|
Jos heitän selityksen kyselylle, voin nähdä sen, koska minulla ei ole hakemistoa luotu_t
, peruskohdistinta käytetään ja kaikki kokoelman asiakirjat skannattiin tuloksen noutamiseksi.
|
|
Kuten näette, haku luotu_t
kenttä voi olla tehoton; joten saatat olla kiusaus heittää hakemisto tälle kentälle. Tämä tietysti tehtäisi tietyn kyselyn tehokkaammaksi, mutta sinulle aiheutuisi uuden indeksin kustannukset, joka kuluttaa enemmän muistia ja lisäykset olisivat hieman hitaampia uuden luodun hakemiston päivityksen vuoksi.
Kuten käy ilmi, koska _id
kenttä upottaa siihen Unix-aikakauden, voit yhtä helposti luoda löytölausekkeen ilman sisältäen luotu_t
ala. Esimerkiksi MongoDB Ruby -ohjaimen avulla voit luoda ObjectId
'S alkaen Aika
niin kuin: