5 - Campo obligatorio _id

En MongoDB todo documento requiere un campo clave que se debe llamar _id. Si nosotros como desarrolladores no definimos dicho campo el mismo se crea en forma automática y se carga un valor único.

Podemos definir y cargar un valor en el campo _id cuando inicializamos un documento:

db.clientes.insertOne(
  {
    _id: 1,  
    nombre: 'Lopez Marcos',
    domicilio: 'Colon 111',
    provincia: 'Cordoba'
  }
)

Cuando ejecutamos la inserción desde el shell de MongoDB tenemos como resultado:

MongoDB insertOne con _id definida por el usuario

Cuando se ejecuta el método insertOne nos retorna un objeto JSON informando del resultado de la inserción mediante un objeto con dos campos, el primero acknowledged que indica si el documento fue admitido en la colección y el _id que en este caso lo define el usuario de la base de datos.

Si se produce un error nos genera un objeto JSON con otra estructura, probemos de intentar de ingresar un segundo documento con el mismo _id:

db.clientes.insertOne(
  {
    _id: 1,  
    nombre: 'Perez Ana',
    domicilio: 'San Martin 222',
    provincia: 'Santa Fe'
  }
)

MongoDB insertOne con _id repetido

Nos retorna un objeto JSON que entre otros campos define uno llamado errmsg con el mensaje de error.

Si nuestra aplicación administra el campo '_id' hay que tener en cuenta que nunca puede repetirse y en el caso que intentemos ingresar un documento con clave repetida luego dicho documento no se inserta en la colección.

Mostremos todos los documentos almacenados en la colección libros:

MongoDB insertOne find

Hay uno solo ya que el segundo intento no se cargó.

Problemas propuestos

  1. Insertar 2 documentos en la colección clientes con '_id' no repetidos

  2. Intentar insertar otro documento con clave repetida.

  3. Mostrar todos los documentos de la colección libros.

Solución
db.clientes.insertOne(
  {
    _id: 2,  
    nombre: 'Perez Ana',
    domicilio: 'San Martin 222',
    provincia: 'Santa Fe'
  }
)

db.clientes.insertOne(
  {
    _id: 3,  
    nombre: 'Garcia Juan',
    domicilio: 'Rivadavia 333',
    provincia: 'Buenos Aires'
  }
)



db.clientes.insertOne(
  {
    _id: 3,  
    nombre: 'Perez Luis',
    domicilio: 'Sarmiento 444',
    provincia: 'Buenos Aires'
  }
)



db.clientes.find()