MongoDB: ObjectID

ObjectID je výchozím primárním klíčem každého dokumentu ukládaného do MongoDB. Tento klíč _id je automaticky přidán driverem do každého objektu, který pošlete do databáze, pokud si jej tedy sami v objektu nenastavíte. Jinými slovy: pokud cokoliv uložíte do jakékoliv collection v Mongu, pak pokud sami nenastavíte klíč _id, bude automaticky vygenerován driverem.

Výhodou tohoto je, že _id je unikátní nejen na úrovni collection do které ukládáte, ale na úrovni celého MongoDB clusteru. To znamená ne jen nad tabulkou, nebo databází, ale hned nad všemi MongoDB servery do vašeho clusteru zapojenými. Je skvělé umět jednoznačně identifikovat dokument, data bez ohledu na tom z jaké tabulky přicházejí… 😀

ObjectID je jedním z datových typů dle specifikace BSON.

Podle oficiální dokumentace je ObjectID 12ti bajtová hodnota skládající se z následujících komponent:

  • Zleva první 4 bajty timestamp
  • Dalších 5 bajtů náhodný string
  • A poslední 3 bajty pak počítadlo startující náhodnou hodnotou

Podle neoficiální dokumentace, pak těch 5 bajtů s náhodným stringem se skládá z :

  • 3 bajtů, které specifikují stroj
  • a zbylě 2 bajty identifikují samontný proces na tomto stroji

Samotná funkce generující ObjectID je extrémně jednoduchá, a proto i velice rychlá.

Získat, či vygenerovat si ObjectID můžete i sami ve své NodeJS aplikaci velice jednoduše:

Nebo pokud holdujete Pythonu, pak třeba takto:

Nad samotným objektem pak můžete volat pár metod:

Tou nejzajímavější pak může být funkce generationTime, která získa z klíče jeho timestamp.