Clave principal de Mongodb: ejemplo para configurar el campo _id con ObjectId()
โก Resumen inteligente
MongoDB La clave primaria es el campo _id, que identifica de forma รบnica cada documento de una colecciรณn. Por defecto, contiene un ObjectId generado automรกticamente, pero tambiรฉn puede asignar su propio valor al campo _id al insertar un documento.

ยฟQuรฉ es la clave principal? MongoDB?
In MongoDB, campo _id como clave principal de la colecciรณn para que cada documento pueda identificarse de forma รบnica en la colecciรณn. El campo _id contiene un valor de ObjectID รบnico.
De forma predeterminada, al insertar documentos en la colecciรณn, si no agrega un nombre de campo con _id en el nombre del campo, entonces MongoDB agregarรก automรกticamente un campo de identificaciรณn de objeto como se muestra a continuaciรณn
Cuando consulta los documentos de una colecciรณn, puede ver el ObjectId de cada documento de la colecciรณn.
Si quiere asegurarse de que MongoDB no crea el campo _id cuando se crea la colecciรณn y si desea especificar su propia identificaciรณn como _id de la colecciรณn, entonces debe definir esto explรญcitamente al crear la colecciรณn.
Al crear explรญcitamente un campo de identificaciรณn, debe crearse con _id en su nombre.
Veamos un ejemplo de cรณmo podemos lograrlo.
db.Employee.insert({_id:10, "EmployeeName" : "Smith"})
Code Explicaciรณn:
- Suponemos que estamos creando el primer documento de la colecciรณn y, por lo tanto, en la declaraciรณn anterior, mientras creamos la colecciรณn, definimos explรญcitamente el campo _id y definimos un valor para รฉl.
Si el comando se ejecuta correctamente y ahora utiliza el comando de bรบsqueda para mostrar los documentos en la colecciรณn, se mostrarรก la siguiente salida
Salida:
El resultado muestra claramente que el campo _id que definimos al crear la colecciรณn ahora se usa como clave principal de la colecciรณn.
ยฟQuรฉ es ObjectId en MongoDB?
Un ObjectId es el tipo de valor predeterminado que MongoDB se asigna a la clave primaria _id. Es un identificador de 12 bytes diseรฑado para ser globalmente รบnico en todos los servidores y colecciones, por lo que dos documentos casi nunca reciben el mismo valor. Debido a que el controlador del cliente puede generar un ObjectId sin consultar al servidor, MongoDB Permite insertar documentos rรกpidamente y escalar a travรฉs de mรบltiples mรกquinas sin necesidad de un contador central.
Cada ObjectId se almacena en formato binario compacto, pero se muestra como una cadena hexadecimal de 24 caracteres; por ejemplo, ObjectId(โ507f1f77bcf86cd799439011โ). Los primeros bytes se basan en la hora actual, lo que significa que los valores aumentan progresivamente a medida que se crean los documentos. Esto hace que cada ObjectId no solo sea รบnico, sino que tambiรฉn permita ordenarlo aproximadamente por orden de inserciรณn, una propiedad รบtil cuando se desea mostrar primero los registros mรกs recientes o los mรกs antiguos.
Estructura de una MongoDB ID de objeto
A MongoDB ObjectId tiene exactamente 12 bytes de longitud, y cada parte tiene un significado especรญfico. Comprender la estructura ayuda a explicar por quรฉ los ObjectIds son รบnicos y estรกn ordenados cronolรณgicamente:
- Marca de tiempo de 4 bytes: El nรบmero de segundos transcurridos desde la รฉpoca Unix, que registra cuรกndo se creรณ el ObjectId. Esto permite ordenar los ID por fecha.
- Valor aleatorio de 5 bytes: Un valor generado una sola vez por proceso, que combina la identidad de la mรกquina y del proceso, por lo que diferentes clientes producen diferentes identificadores.
- Contador incremental de 3 bytes: Un contador que parte de un valor aleatorio y aumenta con cada nuevo ObjectId en el mismo segundo, evitando colisiones durante inserciones rรกpidas.
En conjunto, estas tres partes garantizan que cada ObjectId sea รบnico, incluso cuando se insertan varios documentos simultรกneamente en diferentes servidores. Puede consultar la hora de creaciรณn incrustada en cualquier momento llamando al mรฉtodo getTimestamp() en un ObjectId.
Ventajas de usar ObjectId como clave primaria
El uso del ObjectId predeterminado como clave primaria _id ofrece varias ventajas prรกcticas, por lo que la mayorรญa MongoDB Las colecciones dependen de ello:
- Generaciรณn automรกtica: No es necesario que usted mismo cree o gestione los valores clave, lo que reduce la posibilidad de que existan claves duplicadas.
- Singularidad global: Los ObjectIds permanecen รบnicos en todos los servidores, por lo que funcionan bien en implementaciones distribuidas y fragmentadas.
- Marca de tiempo integrada: La fecha de creaciรณn integrada permite ordenar o filtrar documentos por antigรผedad sin necesidad de un campo de fecha adicional.
- Alto rendimiento: La generaciรณn del lado del cliente evita un viaje de ida y vuelta al servidor, keeping Se inserta rรกpidamente.
Si bien ObjectId se adapta a la mayorรญa de las aplicaciones, tambiรฉn puede elegir un _id personalizado, como una direcciรณn de correo electrรณnico o un cรณdigo de producto, cuando una clave empresarial natural simplifica las consultas. La elecciรณn correcta depende de cรณmo planea buscar y relacionar sus datos.


