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.

  • ๐Ÿ”‘ Funciรณn clave principal: El campo _id es la clave principal que identifica de forma รบnica cada documento en un MongoDB colecciรณn.
  • ๐Ÿ†” ObjectId predeterminado: Si omite _id, MongoDB Agrega automรกticamente un valor ObjectId รบnico de 12 bytes al documento.
  • ๐Ÿ‡ง๐Ÿ‡ท Ordenado por hora: Un ObjectId comienza con una marca de tiempo de 4 bytes, por lo que los ID se pueden ordenar aproximadamente por hora de creaciรณn.
  • โœ๏ธ Claves personalizadas: Al insertar un documento, puede proporcionar su propio valor _id, como un nรบmero o una cadena de texto.
  • ๐Ÿ”’ Inmutable: Una vez establecido, el valor de _id no se puede cambiar; debe eliminarlo y volver a insertarlo para modificarlo.

ยฟ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

Entrada de clave principal MongoDB

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:

  1. 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:

Entrada de clave principal MongoDB

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.

Preguntas Frecuentes

No. El campo _id es inmutable una vez creado el documento. Para modificarlo, debe eliminar el documento existente e insertar uno nuevo con el valor _id deseado.

El campo _id acepta la mayorรญa de los tipos BSON, incluidos ObjectId, enteros, cadenas e incluso documentos incrustados. La รบnica regla es que el valor debe ser รบnico dentro de la colecciรณn y no puede ser una matriz.

Sรญ. MongoDB Crea automรกticamente un รญndice รบnico en el campo _id para cada colecciรณn. Este รญndice no se puede eliminar y permite realizar bรบsquedas por clave primaria con gran rapidez.

La IA puede explicar la marca de tiempo de un ObjectId, generar cรณdigo para extract tiempo de creaciรณn con getTimestamp(), y convertir ObjectIds a cadenas, ayudaping Los desarrolladores depuran y comprenden los identificadores de documentos con mayor rapidez.

Sรญ. La IA puede aconsejarle si debe mantener el ObjectId predeterminado o usar un _id personalizado, como un correo electrรณnico o un UUID, en funciรณn de sus patrones de consulta, necesidades de unicidad y planes de fragmentaciรณn.

Resumir este post con: