Mongodb ensisijainen avain: Esimerkki _id-kentän asettamisesta ObjectId()

⚡ Älykäs yhteenveto

MongoDB Ensisijainen avain on _id-kenttä, joka yksilöi yksilöllisesti jokaisen kokoelman dokumentin. Oletusarvoisesti se sisältää automaattisesti luodun ObjectId:n, mutta voit myös määrittää oman arvon _id-kenttään dokumenttia lisätessäsi.

  • 🔑 Ensisijainen avainrooli: _id-kenttä on ensisijainen avain, joka yksilöi yksilöllisesti jokaisen dokumentin MongoDB kokoelma.
  • 🆔 Oletusobjektin tunnus: Jos jätät _id:n pois, MongoDB lisää automaattisesti dokumenttiin yksilöllisen 12-tavuisen ObjectId-arvon.
  • ⏱️ Aikajärjestyksessä: ObjectId alkaa nelitavuisella aikaleimalla, joten ID:t voidaan karkeasti lajitella luontiajankohdan mukaan.
  • 🇧🇷 Mukautetut avaimet: Voit antaa oman _id-arvon, kuten numeron tai merkkijonon, dokumenttia lisätessäsi.
  • 🔒 Muuttumaton: Kun _id-arvo on asetettu, sitä ei voi muuttaa; sinun on poistettava se ja lisättävä se uudelleen muuttaaksesi sitä.

Mikä on ensisijainen avain MongoDB?

In MongoDB, _id -kenttä kokoelman ensisijaisena avaimena, jotta jokainen asiakirja voidaan yksilöidä kokoelmassa. _id-kenttä sisältää yksilöllisen ObjectID-arvon.

Oletuksena lisättäessä asiakirjoja kokoelmaan, jos et lisää kentän nimeä _id:n kanssa kentän nimeen, MongoDB lisää automaattisesti Object id -kentän alla olevan kuvan mukaisesti

Ensisijainen avain MongoDB

Kun teet kyselyn kokoelman asiakirjoista, näet jokaisen kokoelman asiakirjan ObjectId:n.

Jos haluat varmistaa sen MongoDB ei luo _id-kenttää kokoelmaa luotaessa, ja jos haluat määrittää oman tunnuksesi kokoelman _id:ksi, sinun on määritettävä tämä erikseen kokoelmaa luotaessa.

Kun luot nimenomaisesti id-kentän, sen nimessä on oltava _id.

Katsotaanpa esimerkkiä, kuinka voimme saavuttaa tämän.

db.Employee.insert({_id:10, "EmployeeName" : "Smith"})

Code Selitys:

  1. Oletamme, että luomme kokoelman ensimmäistä dokumenttia, ja siksi yllä olevassa lauseessa kokoelmaa luotaessa määritämme kentän _id ja määritämme sille arvon.

Jos komento suoritetaan onnistuneesti ja käytä nyt hakukomentoa kokoelman dokumenttien näyttämiseen, näytetään seuraava tulos

lähtö:

Ensisijainen avain MongoDB

Tulos osoittaa selvästi, että _id-kenttää, jonka määritimme kokoelmaa luotaessa, käytetään nyt kokoelman ensisijaisena avaimena.

Mikä on ObjectId? MongoDB?

ObjectId on oletusarvoinen arvotyyppi, joka MongoDB määrittää _id-pääavaimelle. Se on 12-tavuinen tunniste, joka on suunniteltu globaalisti yksilölliseksi palvelimien ja kokoelmien välillä, joten kaksi dokumenttia ei juuri koskaan saa samaa arvoa. Koska asiakasohjain voi luoda ObjectId:n kysymättä palvelimelta, MongoDB voi syöttää asiakirjoja nopeasti ja skaalautua useiden koneiden välillä ilman keskitettyä laskuria.

Jokainen ObjectId tallennetaan kompaktissa binäärimuodossa, mutta se näytetään 24-merkkisenä heksadesimaalimerkkijonona, esimerkiksi ObjectId("507f1f77bcf86cd799439011"). Ensimmäiset tavut perustuvat nykyiseen aikaan, mikä tarkoittaa, että arvot kasvavat tasaisesti asiakirjoja luotaessa. Tämä tekee ObjectId:stä paitsi ainutlaatuisen myös karkeasti lajiteltavan lisäysjärjestyksen mukaan, mikä on hyödyllinen ominaisuus, kun haluat uusimmat tai vanhimmat tietueet ensin.

Rakenne MongoDB ObjectId

A MongoDB ObjectId on täsmälleen 12 tavua pitkä, ja jokaisella osalla on tietty merkitys. Rakenteen ymmärtäminen auttaa selittämään, miksi ObjectId:t ovat yksilöllisiä ja ajassa järjestettyjä:

  • 4-tavuinen aikaleima: Unix-epookista kuluneiden sekuntien määrä, joka tallentaa ObjectId:n luontiajankohdan. Tämä mahdollistaa ID:iden lajittelun ajan mukaan.
  • 5-tavuinen satunnaisarvo: Kerran prosessia kohden luotu arvo, joka yhdistää koneen ja prosessin identiteetin, jotta eri asiakkaat tuottavat eri tunnisteet.
  • 3-tavuinen inkrementtilaskuri: Laskuri, joka alkaa satunnaisesta arvosta ja kasvaa jokaisen uuden ObjectId:n myötä saman sekunnin aikana estäen törmäykset nopean lisäyksen aikana.

Yhdessä nämä kolme osaa takaavat, että jokainen ObjectId on yksilöllinen, vaikka useita dokumentteja lisättäisiin samaan aikaan eri palvelimille. Voit lukea upotetun luontiajan milloin tahansa kutsumalla ObjectId:n getTimestamp()-metodia.

ObjectId:n käytön edut ensisijaisena avaimena

Oletusarvoisen ObjectId:n käyttäminen _id-pääavaimena tarjoaa useita käytännön etuja, minkä vuoksi useimmat MongoDB kokoelmat ovat siitä riippuvaisia:

  • Automaattinen generointi: Sinun ei tarvitse luoda tai hallita avainarvoja itse, mikä vähentää kaksoisavainten mahdollisuutta.
  • Globaali ainutlaatuisuus: ObjectId:t pysyvät yksilöllisinä palvelimien välillä, joten ne toimivat hyvin hajautetuissa ja sirpaloiduissa käyttöönotoissa.
  • Sisäänrakennettu aikaleima: Upotetun luontiajan avulla voit lajitella tai suodattaa asiakirjoja iän mukaan ilman ylimääräistä päivämääräkenttää.
  • Korkea suorituskyky: Asiakaspuolen generointi välttää edestakaisen matkan palvelimelle, keeping lisää nopeasti.

Vaikka ObjectId sopii useimpiin sovelluksiin, voit silti valita mukautetun _id:n, kuten sähköpostiosoitteen tai tuotekoodin, kun luonnollinen yritysavain yksinkertaistaa kyselyitä. Oikea valinta riippuu siitä, miten aiot hakea ja yhdistää tietosi.

UKK

Ei. _id-kenttää ei voi muuttaa, kun dokumentti on luotu. Muuttaaksesi sitä sinun on poistettava olemassa oleva dokumentti ja lisättävä uusi, jossa on haluttu _id-arvo.

_id-kenttä hyväksyy useimmat BSON-tyypit, mukaan lukien ObjectId:n, kokonaisluvut, merkkijonot ja jopa upotetut dokumentit. Ainoa sääntö on, että arvon on oltava yksilöllinen kokoelman sisällä eikä se voi olla taulukko.

Kyllä. MongoDB luo automaattisesti yksilöllisen indeksin _id-kentän perusteella jokaiselle kokoelmalle. Tätä indeksiä ei voi poistaa, ja se tekee haut ensisijaisen avaimen perusteella erittäin nopeiksi.

Tekoäly voi selittää ObjectId:n aikaleiman, luoda koodia esimerkiksitracluontiaika getTimestamp():lla ja ObjectId:iden muuntaminen merkkijonoiksi, helping kehittäjät debuggaavat ja ymmärtävät dokumenttien tunnisteita nopeammin.

Kyllä. Tekoäly voi neuvoa, säilytetäänkö oletusarvoinen ObjectId vai käytetäänkö mukautettua _id:tä, kuten sähköpostiosoitetta tai UUID:tä, kyselymalliesi, yksilöllisyystarpeidesi ja sirpalointisuunnitelmiesi perusteella.

Tiivistä tämä viesti seuraavasti: