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 de forma predeterminada al campo _id de cada documento. Se escribe como 24 caracteres hexadecimales en minúscula, por ejemplo 507f1f77bcf86cd799439011. Esta herramienta genera entre 1 y 100 ObjectID válidos cada vez, directamente en el navegador y sin necesidad de una conexión a una base de datos.
Estructura de un ObjectID de MongoDB
Un ObjectID se compone de tres partes, colocadas una después de otra:
- Marca de tiempo (4 bytes). Es el número de segundos transcurridos desde el 1 de enero de 1970 (la época Unix), almacenado como un número sin signo en formato big-endian. Registra cuándo se creó el ObjectID. Cuatro bytes pueden contener valores de 0 a 4.294.967.295, por lo que el campo vuelve a 0 después del 7 de febrero de 2106, 06:28:15 UTC.
- Valor aleatorio (5 bytes). Es un número elegido aleatoriamente una vez, cuando se inicia un programa. Todos los ObjectID que ese programa cree después reutilizan el mismo valor aleatorio, por lo que distintos ordenadores no necesitan coordinarse.
- Contador (3 bytes). Es un número que comienza 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 de principio a fin, 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 construían la sección central a partir de un identificador de máquina y un ID de proceso, en lugar de un número aleatorio. Los controladores actuales, incluida la lógica en la que se basa esta herramienta, usan un único valor aleatorio de 5 bytes por proceso.
Formato y fórmula de un ObjectID de MongoDB
No existe una fórmula aritmética detrás de un ObjectID, a diferencia de un porcentaje o un cálculo de intereses. Se construye convirtiendo tres números en texto hexadecimal y uniéndolos de principio a fin:
- Se toma la hora actual en segundos desde la época Unix, limitada al intervalo de 0 a 4.294.967.295 para que quepa en cuatro bytes. Se escribe como un número hexadecimal de 8 dígitos.
- Se toma el valor aleatorio fijo del proceso, un número de 0 a 2^40 − 1. Se escribe como un número hexadecimal de 10 dígitos.
- Se toma el valor actual del contador, de 0 a 16.777.215. Se escribe como un número hexadecimal de 6 dígitos y, después, se aumenta el contador en 1 para el siguiente ID.
- Se unen las tres cadenas hexadecimales, en ese orden, para formar una cadena de 24 caracteres.
Ejemplo
Supongamos que un programa se inicia en el segundo 1.700.000.000 de la hora Unix, que corresponde al 14 de noviembre de 2023, 22:13:20 UTC. Elige el valor aleatorio 3f2a91c8d4 y comienza su contador en 12.345.
- Marca de tiempo en hexadecimal:
6553f100 - Valor aleatorio en hexadecimal:
3f2a91c8d4 - Contador en hexadecimal:
003039
Al unirlos 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 permanecen iguales, pero el contador aumenta a 12.346 (00303a):
6553f1003f2a91c8d400303a
La lectura de un ObjectID también funciona a la inversa. Dado 507f1f77bcf86cd799439011, sus primeros 8 caracteres, 507f1f77, se decodifican como 1.350.508.407 segundos desde la época, lo que corresponde al 17 de octubre de 2012, 21:13:27 UTC.
Usos habituales de los ObjectID de MongoDB
- Claves principales. MongoDB coloca automáticamente un ObjectID en el campo
_idde un documento, salvo que se proporcione otro valor. - Consulta por fecha de creación. Como la marca de tiempo está integrada, un programa puede leer la fecha de creación aproximada de un documento sin un campo de fecha independiente.
- Ordenación por orden de inserción. Ordenar los documentos por
_idlos ordena aproximadamente por fecha de creación, ya que la marca de tiempo aparece primero en el valor. - Datos de prueba y simulación. Los desarrolladores usan ObjectID generados para crear documentos de ejemplo o pruebas automatizadas sin ejecutar una base de datos.
ObjectID de MongoDB frente a UUID
Un UUID (identificador único universal) es un valor de 16 bytes, cuatro bytes más grande que un ObjectID. Un UUID estándar suele ser aleatorio en toda su extensión, por lo que no revela una fecha de creación ni se ordena según el orden de creación. Un ObjectID es más corto y está ordenado aproximadamente por tiempo, una de las razones por las que MongoDB lo usa de forma predeterminada, aunque no ofrece la misma garantía formal de unicidad que un UUID generado correctamente.
Preguntas frecuentes
¿Para qué se utiliza 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.
¿Los ObjectID de MongoDB tienen garantizada la unicidad?
No en un sentido matemático formal, 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, equivalentes a 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 crear este generador a la vez?
Entre 1 y 100 por lote. Todos los ID de un lote comparten el mismo valor aleatorio del proceso, y cada uno tiene un contador que es 1 mayor que el del anterior.
¿Se pueden usar los ObjectID de MongoDB fuera de MongoDB?
Sí. Como son valores de 12 bytes codificados como texto hexadecimal, también funcionan como ID únicos en otros sistemas, aunque el esquema de ID propio de una base de datos puede adaptarse mejor a sus necesidades.
¿Este generador está conectado a una base de datos MongoDB real?
No. Se ejecuta completamente en el navegador y no lee ni escribe en ninguna base de datos.
Referencias
- "ObjectId." Manual de MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "Especificación de ObjectId." Especificaciones BSON de MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "Tipos BSON." Especificación BSON, https://bsonspec.org/spec.html.