Generador de ObjectID de MongoDB - Crear Identificadores BSON Únicos
Genere identificadores ObjectID de MongoDB únicos al instante con nuestra herramienta en línea gratuita. Cree identificadores BSON válidos de 12 bytes para pruebas, desarrollo y operaciones de base de datos. No se requiere instalación.
Generador de ObjectID de MongoDB
Documentación
¿Qué es un ObjectID de MongoDB?
Un ObjectID de MongoDB es un valor de 12 bytes que MongoDB asigna por defecto al campo _id de cada documento. Se escribe con 24 caracteres hexadecimales en minúscula, por ejemplo 507f1f77bcf86cd799439011. Esta herramienta genera de 1 a 100 ObjectID válidos a la vez, directamente en el navegador y sin necesidad de conexión a una base de datos.
Estructura del ObjectID de MongoDB
Un ObjectID se compone de tres partes, colocadas una tras otra:
- Marca de tiempo (4 bytes). El número de segundos transcurridos desde el 1 de enero de 1970 (la época Unix), almacenado como número sin signo en orden big-endian. Registra cuándo se creó el ObjectID.
- Valor aleatorio (5 bytes). Un número elegido al azar una sola vez, cuando se inicia un programa. Todos los ObjectID que ese programa crea después reutilizan el mismo valor aleatorio, por lo que equipos distintos no necesitan coordinarse.
- Contador (3 bytes). Un número que empieza en un punto aleatorio entre 0 y 16.777.215 y aumenta en 1 con cada ObjectID nuevo. Si supera 16.777.215, vuelve a 0.
Colocadas una a continuación de otra, las partes tienen este aspecto:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Los controladores antiguos de MongoDB formaban la sección central con un identificador de máquina y un identificador de proceso, y no con un número aleatorio. Los controladores actuales, incluida la lógica de esta herramienta, usan en su lugar un único valor aleatorio de 5 bytes por proceso.
Formato y fórmula del ObjectID de MongoDB
No hay ninguna fórmula aritmética detrás de un ObjectID, a diferencia de un cálculo de porcentajes o de intereses. Se construye convirtiendo tres números en texto hexadecimal y uniéndolos uno a continuación de otro:
- Tome la hora actual en segundos desde la época Unix. Escríbala como un número hexadecimal de 8 dígitos.
- Tome el valor aleatorio fijo del proceso, un número entre 0 y 2^40 − 1. Escríbalo como un número hexadecimal de 10 dígitos.
- Tome el valor actual del contador, de 0 a 16.777.215. Escríbalo como un número hexadecimal de 6 dígitos y luego aumente el contador en 1 para el siguiente identificador.
- Una las tres cadenas hexadecimales, en ese orden, en una sola cadena de 24 caracteres.
Ejemplo
Suponga que un programa se inicia en el instante Unix 1.700.000.000 segundos, que corresponde al 14 de noviembre de 2023, 22:13:20 UTC. Elige el valor aleatorio 3f2a91c8d4 y empieza su contador en 12.345.
- Marca de tiempo en hexadecimal:
6553f100 - Valor aleatorio en hexadecimal:
3f2a91c8d4 - Contador en hexadecimal:
003039
Al unir estos valores se obtiene el primer ObjectID:
6553f1003f2a91c8d4003039
Si el programa genera un segundo ObjectID en el mismo segundo, la marca de tiempo y el valor aleatorio se mantienen, pero el contador sube a 12.346 (00303a):
6553f1003f2a91c8d400303a
Un ObjectID también puede leerse en sentido inverso. Dado 507f1f77bcf86cd799439011, sus primeros 8 caracteres, 507f1f77, se decodifican como 1.350.508.407 segundos desde la época, que corresponde al 17 de octubre de 2012, 21:13:27 UTC.
Usos habituales de los ObjectID de MongoDB
- Claves primarias. MongoDB coloca automáticamente un ObjectID en el campo
_idde un documento, salvo que se indique otro valor. - Consulta de la hora de creación. Como la marca de tiempo está incorporada, un programa puede leer la hora aproximada de creación de un documento sin un campo de fecha aparte.
- Ordenación por orden de inserción. Ordenar los documentos por
_idlos ordena aproximadamente por hora de creación, ya que la marca de tiempo va primero en el valor. - Datos de prueba y simulados. Los desarrolladores usan ObjectID generados para construir documentos de ejemplo o pruebas automatizadas sin ejecutar una base de datos.
ObjectID de MongoDB frente a UUID
Un UUID (Universally Unique Identifier, identificador único universal) es un valor de 16 bytes, cuatro bytes más grande que un ObjectID. Un UUID de la versión 4 se construye con números aleatorios, por lo que no revela una hora de creación ni se ordena por orden de creación. El mismo estándar define también un UUID de la versión 7, que empieza con una marca de tiempo Unix en milisegundos y se ordena por tiempo. Un ObjectID es más corto y está ordenado aproximadamente por tiempo. La RFC 9562 describe los UUID como identificadores pensados para ser únicos en el espacio y en el tiempo, pero pide igualmente a quienes los implementan que sopesen las consecuencias de una colisión; en ambos formatos, una colisión es muy improbable en la práctica.
Preguntas frecuentes
¿Para qué se usa un ObjectID de MongoDB?
Es el valor predeterminado que MongoDB coloca en el campo _id de un documento, de modo que cada documento obtiene una clave única sin configuración adicional.
¿Está garantizado que los ObjectID de MongoDB sean únicos? No en un sentido formal y matemático, pero las colisiones son extremadamente improbables. Dos ObjectID tendrían que tener el mismo valor aleatorio y la misma posición del contador en el mismo segundo, algo que normalmente solo ocurre dentro de un único proceso.
¿Se puede leer la fecha de creación a partir de un ObjectID? Sí. Los primeros 8 caracteres hexadecimales, 4 bytes, contienen el número de segundos desde la época Unix. Al convertir ese número en una fecha se obtiene la hora aproximada de creación.
¿Cuántos ObjectID puede generar este generador a la vez? Entre 1 y 100 por lote. Todos los identificadores de un lote comparten el mismo valor aleatorio del proceso, y cada uno tiene un contador una unidad mayor que el anterior.
¿Pueden usarse los ObjectID de MongoDB fuera de MongoDB? Sí. Como son simplemente valores de 12 bytes codificados como texto hexadecimal, también sirven como identificadores únicos en otros sistemas, aunque el esquema de identificadores propio de una base de datos puede adaptarse mejor a sus necesidades.
¿Está este generador conectado a una base de datos MongoDB real? No. Funciona por completo en el navegador y no lee ni escribe en ninguna base de datos.
Referencias
- MongoDB. BSON Types: ObjectId. Tipos BSON — los ObjectId tienen 12 bytes (marca de tiempo de 4 bytes, valor aleatorio de 5 bytes, contador de 3 bytes), rellenan
_idpor defecto y se ordenan aproximadamente por hora de creación. - MongoDB. ObjectID specification. Especificación del ObjectID de BSON — marca de tiempo big-endian sin signo, valor aleatorio generado una vez por proceso, contador que empieza en un valor aleatorio y vuelve a 0 tras 16.777.215, y los antiguos campos de identificador de máquina y de proceso.
- IETF. RFC 9562: Universally Unique IDentifiers (UUIDs). RFC 9562 — un UUID tiene 16 octetos (128 bits); la versión 4 es aleatoria y la versión 7 está ordenada por tiempo.