No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Insertando varios documentos

12/30
Recursos

¿Cómo realizar operaciones CRUD en MongoDB?

El mundo de las bases de datos a menudo requiere manejar una serie de operaciones fundamentales conocidas como CRUD (Create, Read, Update, Delete). En esta sesión, nos enfocaremos en cómo insertar documentos en MongoDB, usando tanto Mongo Atlas, una solución en la nube, como herramientas locales de comandos. Si eres desarrollador o simplemente un entusiasta de la tecnología, esta información te será invaluable para gestionar eficientemente tus datos.

¿Cómo conectar y comenzar a usar MongoDB Atlas?

Para comenzar a usar MongoDB Atlas, nos conectamos a través de Visual Studio Code (VS Code), una potente herramienta para codificar. Aquí seguimos los siguientes pasos:

  • Creamos una carpeta llamada '04' y dentro un archivo denominado insert.doc.mongodb.
  • Usamos use platzi_store para indicarle a MongoDB que utilizaremos una base de datos llamada 'platzi_store'. Este comando creará automáticamente la base de datos si aún no existe.
  • Del mismo modo, al referenciarnos a db.products, si la colección 'products' no estaba creada previamente, MongoDB se encargará de hacerlo automáticamente.

¿Cómo insertar un documento en MongoDB?

El paso crucial es aprender a insertar documentos en MongoDB, y lo haremos utilizando 'insertOne'. Este método permite agregar documentos o registros nuevos a nuestra base de datos. Un documento en MongoDB se estructura en un formato clave-valor.

db.products.insertOne({
  "name": "product1",
  "price": 1000
})

Podemos insertar múltiples documentos de manera consecutiva. Hay que estar conscientes de que, al usar Playgrounds en VS Code, el resultado mostrado es solo de la última instrucción ejecutada, aunque el resto también se procese correctamente.

¿Cómo realizar consultas para verificar la inserción?

Para corroborar las inserciones, realizaremos una búsqueda o query con find:

db.products.find()

Este comando nos mostrará los documentos que hemos insertado y podemos ver los detalles de cada producto, como su nombre y precio.

¿Qué debo considerar sobre los IDs en MongoDB?

MongoDB asigna automáticamente un 'Object ID' (OID) único a cada documento. Este es crucial para asegurar que no haya colisiones de datos:

  • El 'Object ID' es un identificador único que MongoDB asegura será irrepetible.
  • Puedes elegir crear tus propios IDs, pero debes ser cuidadoso de evitar duplicados, ya que MongoDB no permitirá documentos con IDs duplicados y mostrará un 'duplicate key error'.
db.products.insertOne({
  "_id": "customID1",
  "name": "product2",
  "price": 500
})

Al insertar documentos con IDs personalizados, serás responsable de asegurarte que sean únicos. Intentar reinsertar un documento con el mismo ID generará un error, demostrando la importancia de los Objetos ID generados automáticamente por MongoDB.

Espero que estos tips te acerquen más a manejar de manera eficiente tus bases de datos con MongoDB. ¡Te invito a continuar explorando estas habilidades esenciales!

Aportes 8

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Con esta instrucción, le decimos a Mongo que si hay un problema de duplicidad, solo deje estos documentos fuera y que continue con la inserción de datos.

, {
    ordered: false
}
use("platzi_store")

db.products.drop() // drop() borra todos los documentos de toda una coleccion !cuidado :v!

db.products.insertMany([  //si hay una colision de _id  si inserta pero hasta la colision
    {
        _id: 1,
        name: "Raqueta",
        price: 1000
    },
    {
        _id: 2,
        name: "pelota",
        price: 20
    }
],{
    ordered: false //si hay una colision de _id  si inserta pero no inserta los colisionados
}
) 

db.products.find()

Para comentar dentro del archivo .mongodb se usa //

Si hay una falla al insertar un conjunto de documentos, al encontrar una falla en el diccionario, a partir de ahi se dejan de crear documentos.

Inserción de documentos y duplicidad

podemos insertar varios documentos en una colección con insertMany([{...},{...}])

db.collection.insertMany([
    {
      ...
    },
    {
      ...
    },
    {
      ...
    },
    {
      ...
    },
])

siguiendo el ejercicio, podemos insertar varios productos a la colección de productos
src/crud/insertMany.mongodb:

use("try")
db.products.drop()

db.products.insertMany([
  {
    _id: 1,
    name: "Product 1",
    price: 100
  },
  {
    _id: 2,
    name: "Product 2",
    price: 200
  },
  {
    _id: 3,
    name: "Product 3",
    price: 300
  },
])

db.products.find()

con esta instrucción insertaríamos 3 documentos a la colección, sin embargo, hay que tener en cuenta que si hay problemas de duplicidad como en el siguiente caso, donde el documento numero 3 tiene el mismo identificador que el documento numero 1

db.products.insertMany([
  {
    _id: 1,
    name: "Product 1",
    price: 100
  },
  {
    _id: 2,
    name: "Product 2",
    price: 200
  },
  {
    _id: 1,
    name: "Product 1",
    price: 100
  },
   {
    _id: 3,
    name: "Product 3",
    price: 300
  },
])

Mongo solo insertara los documentos hasta el punto donde encuentre el error, insertando solo los 2 primeros documentos, para evitar este comportamiento por defecto, debemos pasarle un segundo argumento { ordered: false } a la instrucción insertMany([{...},{...}, { ordered: false }])

db.products.insertMany([
  {
    _id: 1,
    name: "Product 1",
    price: 100
  },
  {
    _id: 2,
    name: "Product 2",
    price: 200
  },
  {
    _id: 1,
    name: "Product 1",
    price: 100
  },
   {
    _id: 3,
    name: "Product 3",
    price: 300
  },
],{
  ordered: false
})

de esta forma, Mongo insertara todos los documentos que le mandamos y solo dejara por fuera los que tengan problemas de duplicidad.

Que bueno esta eso del ordered
use("platzi_store");

db.products.drop(); // Delete all documents

db.products.insertMany(
  [
    {
      _id: 1,
      name: "Laptop",
      price: 1099,
    },
    {
      _id: 2,
      name: "Mouse",
      price: 508,
    },
    {
      _id: 3,
      name: "Keyboard",
      price: 746,
    },
    {
      _id: 2,
      name: "Monitor",
      price: 1299,
    },
    {
      _id: 5,
      name: "Headphones",
      price: 129,
    },
  ],
  {
    ordered: false, // If has problems, how to _ids duplicate, continue with after items
  }
);

db.products.find();

Por lo que veo, podemos usar insertMany para insertar varios documentos pero también podemos usar solo la instrucción insert con la misma sintaxis.