Insertar Datos en MongoDB

MongoDBBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá las técnicas fundamentales para insertar datos en una base de datos MongoDB. Practicará la inserción de documentos individuales y múltiples, el manejo de posibles errores y la verificación de la integridad de los datos utilizando la shell de MongoDB (mongosh).

Este laboratorio se centra en la operación "Crear" dentro de CRUD (Crear, Leer, Actualizar, Eliminar). Construirá una base de datos simple de librería desde cero, adquiriendo experiencia práctica con tareas esenciales de gestión de datos en un entorno NoSQL. Al final, tendrá una sólida comprensión de cómo agregar y administrar datos de manera efectiva en MongoDB.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 87%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Insertar un Documento Individual

En este primer paso, se conectará al servidor MongoDB, creará una base de datos y una colección, e insertará su primer documento. MongoDB almacena datos en documentos flexibles, similares a JSON, lo que facilita la representación de estructuras de datos complejas.

Primero, conéctese a su instancia local de MongoDB utilizando la Shell de MongoDB. Abra su terminal y ejecute el siguiente comando:

mongosh

Verá un prompt > que indica que ahora está en la Shell de MongoDB y conectado a la base de datos.

A continuación, cambie a una nueva base de datos llamada bookstore. Si la base de datos no existe, MongoDB la creará por usted cuando almacene datos por primera vez.

use bookstore

La salida confirmará que ha cambiado a la base de datos bookstore.

switched to db bookstore

Ahora, inserte un único documento en una nueva colección llamada books. Una colección es un grupo de documentos MongoDB, aproximadamente equivalente a una tabla en una base de datos relacional. El método insertOne() agrega un único documento a la colección.

db.books.insertOne({
  title: "The Great Gatsby",
  author: "F. Scott Fitzgerald",
  year: 1925,
  genres: ["Classic", "Fiction"],
  stock: 10
});

Tras una inserción exitosa, MongoDB devuelve un documento que confirma la operación y proporciona el _id único del documento recién insertado.

{
  acknowledged: true,
  insertedId: ObjectId("652f8d3e111a2b3c4d5e6f78")
}

El _id es un identificador único generado automáticamente por MongoDB para cada documento, lo que garantiza que cada documento en una colección pueda ser identificado de forma única.

Insertar Múltiples Documentos

Insertar documentos uno por uno puede ser ineficiente. Para agregar múltiples documentos a la vez, MongoDB proporciona el método insertMany(). Esto se conoce como una operación de inserción masiva (bulk insert), que reduce el número de viajes de ida y vuelta de red a la base de datos.

En este paso, agregará tres libros más a su colección books en un solo comando. Asegúrese de estar aún en la shell mongosh y de haber cambiado a la base de datos bookstore.

Utilice el método insertMany(), pasando un array de objetos de documento.

db.books.insertMany([
  {
    title: "1984",
    author: "George Orwell",
    year: 1949,
    genres: ["Dystopian", "Science Fiction"],
    stock: 15
  },
  {
    title: "To Kill a Mockingbird",
    author: "Harper Lee",
    year: 1960,
    genres: ["Classic", "Fiction"],
    stock: 5
  },
  {
    title: "Pride and Prejudice",
    author: "Jane Austen",
    year: 1813,
    genres: ["Romance", "Classic"],
    stock: 12
  }
]);

La salida confirmará que la operación fue reconocida y listará los valores _id de cada uno de los tres documentos que insertó.

{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("652f8e3e111a2b3c4d5e6f79"),
    '1': ObjectId("652f8e3e111a2b3c4d5e6f7a"),
    '2': ObjectId("652f8e3e111a2b3c4d5e6f7b")
  }
}

Para verificar que los documentos se han agregado, puede contar el número total de documentos en la colección.

db.books.countDocuments();

El resultado debería ser 4, representando el documento del paso anterior y los tres que acaba de agregar.

4

Consultar y Verificar Datos Insertados

Después de insertar datos, el siguiente paso lógico es recuperarlos y examinarlos. Esto es crucial para verificar que sus datos se almacenaron correctamente y para construir aplicaciones que lean de la base de datos. MongoDB proporciona el potente método find() para este propósito.

Para recuperar todos los documentos de la colección books, utilice el método find() sin ningún argumento.

db.books.find();

Este comando listará los cuatro documentos que se encuentran actualmente en su colección. La salida puede ser extensa, pero es una buena manera de ver todo a la vez.

Más a menudo, querrá encontrar documentos que coincidan con criterios específicos. Para encontrar todos los libros publicados antes de 1950, puede usar un filtro de consulta con el operador $lt (menor que).

db.books.find({ year: { $lt: 1950 } });

Esta consulta devolverá los documentos de "The Great Gatsby", "1984" y "Pride and Prejudice".

A veces, solo necesita campos específicos de los documentos, no el documento completo. Esto se llama proyección. Para recuperar solo el title (título) y el author (autor) de todos los libros del género "Classic", puede agregar un documento de proyección como segundo argumento a find().

db.books.find({ genres: "Classic" }, { title: 1, author: 1, _id: 0 });

En el documento de proyección, 1 significa "incluir este campo" y 0 significa "excluir este campo". Por defecto, el campo _id siempre se incluye, por lo que lo excluimos explícitamente con _id: 0.

La salida será una lista limpia de títulos y autores:

[
  { "title": "The Great Gatsby", "author": "F. Scott Fitzgerald" },
  { "title": "To Kill a Mockingbird", "author": "Harper Lee" },
  { "title": "Pride and Prejudice", "author": "Jane Austen" }
]

Manejar Errores de Inserción con un Índice Único

La integridad de los datos es vital para cualquier base de datos. Una forma de garantizarla es evitando entradas duplicadas. En este paso, aprenderá cómo crear un índice único y observar cómo MongoDB maneja los intentos de violar esta restricción.

Asegurémonos de que no haya dos libros en nuestra colección con el mismo título. Para hacer esto, cree un índice único en el campo title.

db.books.createIndex({ title: 1 }, { unique: true });

La salida confirma el nombre del índice que se creó.

title_1

Ahora que el índice único está en su lugar, intentemos insertar un documento con un título que ya existe en la colección, como "1984".

db.books.insertOne({
  title: "1984",
  author: "George Orwell",
  year: 1949,
  genres: ["Dystopian", "Science Fiction"],
  stock: 20
});

Esta operación fallará. MongoDB lanzará una MongoBulkWriteException con un código de error E11000, que indica una violación de clave duplicada. Este es el comportamiento esperado y confirma que nuestro índice único está funcionando correctamente.

MongoBulkWriteException: E11000 duplicate key error collection: bookstore.books index: title_1 dup key: { title: "1984" }

En una aplicación, envolvería tales operaciones de base de datos en un bloque try...catch para manejar estos errores de manera elegante en lugar de que el programa falle. Puede simular esto también en la shell mongosh.

try {
  db.books.insertOne({
    title: "1984",
    author: "George Orwell"
  });
} catch (e) {
  print("Error inserting document:", e.message);
}

Este comando capturará la excepción e imprimirá un mensaje de error amigable para el usuario, demostrando una forma robusta de manejar posibles fallos de inserción.

Forzar la Integridad de los Datos con Validación de Esquema

Si bien MongoDB es conocido por su esquema flexible, puede hacer cumplir una estructura específica para sus documentos utilizando la validación de esquema. Esto asegura que todos los documentos de una colección cumplan con un conjunto definido de reglas, mejorando la calidad y consistencia de los datos.

En este último paso, agregará un validador a la colección books. Este validador requerirá que cada documento tenga un title, author y year, y hará cumplir tipos de datos y rangos específicos para estos campos.

Utilice el comando collMod (modificar colección) para agregar el validador.

db.runCommand({
  collMod: "books",
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["title", "author", "year"],
      properties: {
        title: {
          bsonType: "string",
          description: "must be a string and is required"
        },
        author: {
          bsonType: "string",
          description: "must be a string and is required"
        },
        year: {
          bsonType: "int",
          minimum: 1000,
          maximum: 2024,
          description: "must be an integer between 1000 and 2024"
        }
      }
    }
  }
});

La salida { ok: 1 } confirma que el validador se aplicó correctamente.

Ahora, probemos el validador intentando insertar un documento que viole las reglas. Este documento tiene un year que está fuera del rango permitido.

db.books.insertOne({
  title: "The Hobbit",
  author: "J.R.R. Tolkien",
  year: 999
});

La inserción fallará y MongoDB devolverá un mensaje de error explicando que el documento no pasó la validación.

MongoBulkWriteException: Document failed validation

Esto confirma que su regla de validación de esquema está activa y protege eficazmente la integridad de sus datos. Esta potente característica combina la flexibilidad de una base de datos NoSQL con la fiabilidad de la validación de datos.

Resumen

En este laboratorio, ha aprendido con éxito las técnicas principales para insertar datos en una colección de MongoDB. Comenzó insertando un solo documento con insertOne() y luego agregó eficientemente varios documentos utilizando la operación masiva insertMany().

También practicó cómo consultar y verificar sus datos utilizando find() y countDocuments(). Lo más importante es que exploró dos métodos clave para garantizar la integridad de los datos: la creación de un índice único para prevenir duplicados y la implementación de validación de esquema para hacer cumplir una estructura de documento consistente. Estas habilidades son fundamentales para construir aplicaciones robustas y confiables con MongoDB.