Mongodb elsődleges kulcs: Példa az _id mező beállítására az ObjectId() paraméterrel
⚡ Okos összefoglaló
MongoDB Az elsődleges kulcs az _id mező, amely egyedileg azonosítja a gyűjteményben található összes dokumentumot. Alapértelmezés szerint egy automatikusan generált ObjectId-t tartalmaz, de saját értéket is rendelhet az _id mezőhöz egy dokumentum beszúrásakor.

Miben található az elsődleges kulcs MongoDB?
In MongoDB, _id mezőt a gyűjtemény elsődleges kulcsaként, így minden dokumentum egyedileg azonosítható a gyűjteményben. Az _id mező egyedi ObjectID értéket tartalmaz.
Alapértelmezés szerint, amikor dokumentumokat szúr be a gyűjteménybe, ha nem ad hozzá olyan mezőnevet a mezőnévben, amelyben az _id, akkor MongoDB automatikusan hozzáad egy objektumazonosító mezőt az alábbiak szerint
Amikor lekérdezi egy gyűjtemény dokumentumait, láthatja a gyűjteményben lévő egyes dokumentumok ObjectId-jét.
Ha azt szeretné biztosítani MongoDB nem hozza létre az _id mezőt a gyűjtemény létrehozásakor, és ha a saját azonosítóját szeretné megadni a gyűjtemény _id-jeként, akkor ezt kifejezetten meg kell adnia a gyűjtemény létrehozásakor.
Ha kifejezetten azonosító mezőt hoz létre, akkor azt úgy kell létrehozni, hogy a nevében szerepeljen az _id.
Nézzünk egy példát arra, hogyan érhetjük el ezt.
db.Employee.insert({_id:10, "EmployeeName" : "Smith"})
Code Magyarázat:
- Feltételezzük, hogy a gyűjtemény első dokumentumát hozzuk létre, és ezért a fenti utasításban a gyűjtemény létrehozásakor kifejezetten definiáljuk az _id mezőt, és meghatározunk egy értéket.
Ha a parancsot sikeresen végrehajtotta, és most használja a find parancsot a gyűjteményben lévő dokumentumok megjelenítéséhez, a következő kimenet jelenik meg
output:
A kimenet egyértelműen azt mutatja, hogy a gyűjtemény létrehozásakor megadott _id mező mostantól a gyűjtemény elsődleges kulcsa.
Mi az ObjectId a következőben: MongoDB?
Az ObjectId az alapértelmezett értéktípus, amely MongoDB hozzárendeli az _id elsődleges kulcshoz. Ez egy 12 bájtos azonosító, amely globálisan egyedi a szerverek és gyűjtemények között, így két dokumentum szinte soha nem kapja meg ugyanazt az értéket. Mivel a kliens illesztőprogram képes ObjectId-t generálni a szerver megkérdezése nélkül, MongoDB gyorsan beillesztheti a dokumentumokat, és központi számláló nélkül is több gépen is átméretezhető.
Minden ObjectId tömör bináris formában tárolódik, de 24 karakteres hexadecimális karakterláncként jelenik meg, például ObjectId(„507f1f77bcf86cd799439011”). Az első bájtok az aktuális időponton alapulnak, ami azt jelenti, hogy az értékek folyamatosan növekednek a dokumentumok létrehozásakor. Ezáltal az ObjectId nemcsak egyedi, hanem nagyjából beszúrási sorrend szerint is rendezhető, ami hasznos tulajdonság, ha a legújabb vagy legrégebbi rekordokat szeretné először megjeleníteni.
Szerkezete a MongoDB Objektumazonosító
A MongoDB Az ObjectId pontosan 12 bájt hosszú, és minden résznek meghatározott jelentése van. A struktúra megértése segít megérteni, hogy az ObjectId-k miért egyediek és időrendben vannak:
- 4 bájtos időbélyeg: A Unix epoch óta eltelt másodpercek száma, rögzítve az ObjectId létrehozásának időpontját. Ezáltal az azonosítók idő szerint rendezhetők.
- 5 bájtos véletlenszerű érték: Egy folyamatonként egyszer generált érték, amely a gép és a folyamat identitását kombinálja, így a különböző kliensek különböző azonosítókat hoznak létre.
- 3 bájtos növekvő számláló: Egy számláló, amely egy véletlenszerű értékkel indul, és minden új ObjectId-vel növekszik ugyanabban a másodpercben, megakadályozva az ütközéseket a gyors beszúrások során.
Ez a három rész együttesen garantálja, hogy minden ObjectId egyedi, még akkor is, ha egyszerre sok dokumentumot szúrnak be különböző szervereken. A beágyazott létrehozási időt bármikor leolvashatja a getTimestamp() metódus meghívásával egy ObjectId-n.
Az ObjectId elsődleges kulcsként való használatának előnyei
Az alapértelmezett ObjectId használata _id elsődleges kulcsként számos gyakorlati előnnyel jár, ezért a legtöbb MongoDB A gyűjtemények erre támaszkodnak:
- Automatikus generálás: Nem kell saját kezűleg létrehoznia vagy kezelnie a kulcsértékeket, így csökken a duplikált kulcsok esélye.
- Globális egyediség: Az ObjectId-k egyediek maradnak a szerverek között, így jól működnek elosztott és szegmenses telepítésekben is.
- Beépített időbélyeg: A beágyazott létrehozási idő lehetővé teszi a dokumentumok kor szerinti rendezését vagy szűrését további dátummező nélkül.
- Nagy teljesítményű: A kliensoldali generálás elkerüli a szerverhez vezető oda-vissza utat, keeping gyorsan beilleszthető.
Bár az ObjectId a legtöbb alkalmazáshoz megfelelő, továbbra is választhat egyéni _id-t, például egy e-mail címet vagy termékkódot, ha egy természetes üzleti kulcs egyszerűbbé teszi a lekérdezéseket. A helyes választás attól függ, hogyan tervezi az adatok keresését és összekapcsolását.


