MongoDB ObjectId


En los capítulos anteriores ya hemos utilizado el objeto Id (ObjectId) de MongoDB.

En este capítulo, conoceremos la estructura de ObjectId.

ObjectId es un dato de tipo BSON de 12 bytes, con el siguiente formato:

  • Los primeros 4 bytes representan la marca de tiempo
  • Los siguientes 3 bytes son el código de identificación de la máquina
  • Los dos bytes siguientes están compuestos por el ID del proceso (PID)
  • Los últimos tres bytes son un número aleatorio.

Los documentos almacenados en MongoDB deben tener una clave "_id". El valor de esta clave puede ser de cualquier tipo, y por defecto es un objeto ObjectId.

Dentro de una colección, cada documento tiene un valor "_id" único, para garantizar que cada documento en la colección pueda ser identificado de manera única.

La razón principal por la que MongoDB adopta ObjectId en lugar de otras prácticas más convencionales (como claves primarias autoincrementales) es que sincronizar valores de claves primarias autoincrementales en múltiples servidores requiere mucho esfuerzo y tiempo.


Crear un nuevo ObjectId

Usa el siguiente código para generar un nuevo ObjectId:

>newObjectId = ObjectId()

La declaración anterior devuelve el siguiente id único generado:

ObjectId("5349b4ddd2781d08c09890f3")

También puedes usar el id generado para reemplazar el ObjectId generado automáticamente por MongoDB:

>myObjectId = ObjectId("5349b4ddd2781d08c09890f4")

Marca de tiempo de creación del documento

Dado que ObjectId almacena 4 bytes de marca de tiempo, no necesitas guardar un campo de marca de tiempo para tus documentos. Puedes obtener la hora de creación del documento mediante la función getTimestamp:

>ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()

El código anterior devolverá la hora de creación del documento en formato ISO:

ISODate("2014-04-12T21:49:17Z")

Convertir ObjectId a cadena

En algunos casos, es posible que necesites convertir ObjectId a formato de cadena. Puedes usar el siguiente código:

>new ObjectId().str

El código anterior devolverá una cadena en formato Guid:

5349b4ddd2781d08c09890f3
Otras extensiones