Primární klíč Mongodb: Příklad nastavení pole _id pomocí ObjectId()

⚡ Chytré shrnutí

MongoDB Primární klíč je pole _id, které jednoznačně identifikuje každý dokument v kolekci. Ve výchozím nastavení obsahuje automaticky generované ObjectId, ale při vkládání dokumentu můžete poli _id přiřadit i vlastní hodnotu.

  • 🔑 Primární klíčová role: Pole _id je primární klíč, který jednoznačně identifikuje každý dokument v MongoDB kolekce.
  • 🆔 Výchozí ID objektu: Pokud vynecháte _id, MongoDB automaticky přidá do dokumentu jedinečnou 12bajtovou hodnotu ObjectId.
  • ⏱️ Časově objednané: ObjectId začíná 4bajtovým časovým razítkem, takže ID lze zhruba seřadit podle času vytvoření.
  • __ Vlastní klíče: Při vkládání dokumentu můžete zadat vlastní hodnotu _id, například číslo nebo řetězec.
  • 🔒 Neměnný: Jakmile je hodnota _id nastavena, nelze ji změnit; pro její změnu je nutné ji smazat a znovu vložit.

Co je primární klíč MongoDB?

In MongoDB, pole _id jako primární klíč pro kolekci, aby bylo možné každý dokument v kolekci jednoznačně identifikovat. Pole _id obsahuje jedinečnou hodnotu ObjectID.

Ve výchozím nastavení při vkládání dokumentů do kolekce, pokud nepřidáte název pole s _id v názvu pole, pak MongoDB automaticky přidá pole ID objektu, jak je znázorněno níže

Vstup primárního klíče MongoDB

Když se dotazujete na dokumenty v kolekci, můžete vidět ObjectId pro každý dokument v kolekci.

Pokud to chcete zajistit MongoDB nevytvoří pole _id při vytváření kolekce a pokud chcete zadat své vlastní id jako _id kolekce, musíte to explicitně definovat při vytváření kolekce.

Když explicitně vytváříte pole id, musí být vytvořeno s _id v názvu.

Podívejme se na příklad, jak toho můžeme dosáhnout.

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

Code Vysvětlení:

  1. Předpokládáme, že vytváříme první dokument v kolekci, a proto ve výše uvedeném příkazu při vytváření kolekce explicitně definujeme pole _id a definujeme pro něj hodnotu.

Pokud je příkaz úspěšně proveden a nyní pomocí příkazu find zobrazíte dokumenty v kolekci, zobrazí se následující výstup

Výstup:

Vstup primárního klíče MongoDB

Výstup jasně ukazuje, že pole _id, které jsme definovali při vytváření kolekce, se nyní používá jako primární klíč pro kolekci.

Co je ObjectId v MongoDB?

ObjectId je výchozí typ hodnoty, který MongoDB přiřazuje primárnímu klíči _id. Jedná se o 12bajtový identifikátor, který je navržen tak, aby byl globálně jedinečný napříč servery a kolekcemi, takže dva dokumenty téměř nikdy neobdrží stejnou hodnotu. Protože ovladač klienta může vygenerovat ObjectId bez dotazování serveru, MongoDB umožňuje rychlé vkládání dokumentů a škálování napříč mnoha stroji bez centrálního pultu.

Každé ObjectId je uloženo v kompaktním binárním tvaru, ale zobrazuje se jako hexadecimální řetězec o délce 24 znaků, například ObjectId(„507f1f77bcf86cd799439011“). První bajty jsou založeny na aktuálním čase, což znamená, že hodnoty se s vytvářením dokumentů plynule zvyšují. Díky tomu je ObjectId nejen jedinečné, ale také zhruba seřaditelné podle pořadí vkládání, což je užitečná vlastnost, když chcete nejdříve zobrazit nejnovější nebo nejstarší záznamy.

Struktura a MongoDB ID objektu

A MongoDB ID objektu (ObjectId) má přesně 12 bajtů a každá část má specifický význam. Pochopení struktury pomáhá vysvětlit, proč jsou ID objektu jedinečná a časově seřazená:

  • 4bajtové časové razítko: Počet sekund od unixové epochy, zaznamenávající, kdy bylo ObjectId vytvořeno. Díky tomu lze ID seřadit podle času.
  • 5bajtová náhodná hodnota: Hodnota generovaná jednou za proces, kombinující identitu stroje a procesu, takže různí klienti vytvářejí různá ID.
  • 3bajtový inkrementační čítač: Čítač, který začíná náhodnou hodnotou a zvyšuje se s každým novým ObjectId ve stejné sekundě, čímž se zabraňuje kolizím během rychlého vkládání.

Tyto tři části společně zaručují, že každé ObjectId je jedinečné, a to i v případě, že je mnoho dokumentů vloženo současně na různé servery. Vložený čas vytvoření si můžete kdykoli přečíst voláním metody getTimestamp() pro ObjectId.

Výhody použití ObjectId jako primárního klíče

Použití výchozího ObjectId jako primárního klíče _id nabízí několik praktických výhod, a proto většina MongoDB kolekce se na tom spoléhají:

  • Automatické generování: Nemusíte si sami vytvářet ani spravovat hodnoty klíčů, což snižuje riziko duplicitních klíčů.
  • Globální jedinečnost: Identifikátory ObjectId zůstávají napříč servery jedinečné, takže fungují dobře v distribuovaných a horizontálně rozdělených nasazeních.
  • Vestavěné časové razítko: Vložený čas vytvoření umožňuje třídit nebo filtrovat dokumenty podle stáří bez dalšího pole s datem.
  • Vysoký výkon: Generování na straně klienta zabraňuje zpětnému přenosu na server,ping vkládá rychle.

I když ObjectId vyhovuje většině aplikací, stále si můžete zvolit vlastní _id, například e-mailovou adresu nebo kód produktu, pokud přirozený obchodní klíč zjednodušuje dotazy. Správná volba závisí na tom, jak plánujete vyhledávat a propojovat svá data.

Nejčastější dotazy

Ne. Pole _id je po vytvoření dokumentu neměnné. Chcete-li ho změnit, musíte smazat existující dokument a vložit nový s požadovanou hodnotou _id.

Pole _id akceptuje většinu typů BSON, včetně ObjectId, celých čísel, řetězců a dokonce i vložených dokumentů. Jediným pravidlem je, že hodnota musí být v rámci kolekce jedinečná a nesmí se jednat o pole.

Ano. MongoDB Automaticky vytváří unikátní index v poli _id pro každou kolekci. Tento index nelze vymazat a vyhledávání podle primárního klíče je velmi rychlé.

Umělá inteligence dokáže vysvětlit časové razítko ObjectId a vygenerovat kód pro explikaci.tracčas vytvoření pomocí getTimestamp() a převod ObjectId na řetězce, helping vývojáři ladí a chápou identifikátory dokumentů rychleji.

Ano. Umělá inteligence může poradit, zda ponechat výchozí ObjectId nebo použít vlastní _id, jako je e-mail nebo UUID, na základě vašich vzorců dotazů, potřeb jedinečnosti a plánů horizontálního dělení.

Shrňte tento příspěvek takto: