Escribir Consultas Básicas de MongoDB

MongoDBBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá técnicas esenciales de consulta en MongoDB. Comenzará conectándose a una base de datos e insertando datos. Luego, practicará la recuperación de documentos, filtrándolos con coincidencias exactas y operadores de comparación, seleccionando campos específicos para devolver y formateando la salida ordenando y limitando los resultados. Al final de este laboratorio, tendrá una base sólida para consultar datos en una base de datos 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 97%. Ha recibido una tasa de reseñas positivas del 96% por parte de los estudiantes.

Conectar a MongoDB y Encontrar Todos los Documentos

En este primer paso, se conectará al servidor MongoDB, creará una base de datos y una colección, insertará algunos datos de ejemplo y luego recuperará todos los documentos de esa colección. Este es el punto de partida para cualquier interacción con la base de datos.

Primero, abra su terminal e inicie el Shell de MongoDB ejecutando el comando mongosh.

mongosh

El prompt de su terminal cambiará para indicar que ahora está dentro del Shell de MongoDB, listo para ejecutar comandos de 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á cuando almacene datos por primera vez.

use bookstore

Ahora, insertemos algunos documentos en una nueva colección llamada books. Una colección es un grupo de documentos de MongoDB, similar a una tabla en una base de datos relacional. El método insertMany() le permite agregar varios documentos a la vez.

db.books.insertMany([
  { title: "Python Basics", author: "John Smith", year: 2022, stock: 15 },
  { title: "MongoDB Essentials", author: "Jane Doe", year: 2023, stock: 8 },
  { title: "Web Development", author: "Alice Johnson", year: 2021, stock: 20 }
]);

Después de ejecutar el comando, verá una confirmación de que los documentos se insertaron correctamente.

Para recuperar y ver todos los documentos en la colección books, use el método find() sin ningún argumento.

db.books.find();

La salida listará los tres documentos que acaba de insertar. Cada documento tiene un campo _id, que es un identificador único agregado automáticamente por MongoDB.

[
  {
    _id: ObjectId("..."),
    title: 'Python Basics',
    author: 'John Smith',
    year: 2022,
    stock: 15
  },
  {
    _id: ObjectId("..."),
    title: 'MongoDB Essentials',
    author: 'Jane Doe',
    year: 2023,
    stock: 8
  },
  {
    _id: ObjectId("..."),
    title: 'Web Development',
    author: 'Alice Johnson',
    year: 2021,
    stock: 20
  }
]

Consultar Documentos con Coincidencias Exactas

Ahora que puede recuperar todos los documentos, el siguiente paso es filtrarlos para encontrar los específicos. Puede hacerlo proporcionando un documento de filtro de consulta al método find(). Esto le permite realizar coincidencias exactas en los valores de los campos.

Busquemos el libro con el título exacto "Python Basics". El filtro de consulta { title: "Python Basics" } le indica a MongoDB que devuelva solo los documentos donde el campo title sea exactamente "Python Basics".

db.books.find({ title: "Python Basics" });

El comando devolverá solo el documento que coincide con los criterios:

[
  {
    _id: ObjectId("..."),
    title: 'Python Basics',
    author: 'John Smith',
    year: 2022,
    stock: 15
  }
]

También puede consultar basándose en otros campos, como números. Por ejemplo, para encontrar todos los libros publicados en el año 2021:

db.books.find({ year: 2021 });

Para crear una consulta más específica, puede especificar varios campos en el documento de filtro. Esto crea una condición implícita de "Y" (AND), lo que significa que todas las condiciones especificadas deben ser verdaderas para que se devuelva un documento. Busquemos un libro escrito por "Jane Doe" Y publicado en 2023.

db.books.find({ author: "Jane Doe", year: 2023 });

Esta consulta devolverá el libro "MongoDB Essentials", ya que es el único que coincide tanto con el autor como con el año.

Filtrar con Operadores de Comparación

Las coincidencias exactas son útiles, pero a menudo necesita encontrar documentos basándose en comparaciones, como encontrar todos los libros publicados después de un cierto año o con un stock superior a un cierto nivel. MongoDB proporciona un conjunto de operadores de consulta para este propósito.

Los operadores de comparación se especifican dentro del documento de consulta utilizando una sintaxis como { campo: { $operador: valor } }.

Busquemos todos los libros publicados después de 2021. Usaremos el operador "mayor que", $gt.

db.books.find({ year: { $gt: 2021 } });

Esto devolverá "Python Basics" (2022) y "MongoDB Essentials" (2023).

Aquí hay otros operadores de comparación comunes:

  • $lt: menor que
  • $gte: mayor o igual que
  • $lte: menor o igual que
  • $ne: no igual a

Por ejemplo, para encontrar todos los libros con un stock de 15 o menos, puede usar el operador $lte.

db.books.find({ stock: { $lte: 15 } });

Otro operador útil es $in, que coincide con cualquiera de los valores especificados en una matriz (array). Busquemos todos los libros escritos por "John Smith" o "Alice Johnson".

db.books.find({ author: { $in: ["John Smith", "Alice Johnson"] } });

Esta consulta devolverá "Python Basics" y "Web Development". Puede combinar operadores con coincidencias exactas para construir consultas más complejas. Por ejemplo, encuentre libros publicados en 2022 o después con un stock menor a 20.

db.books.find({ year: { $gte: 2022 }, stock: { $lt: 20 } });

Seleccionar Campos Específicos a Devolver (Proyección)

Por defecto, las consultas de MongoDB devuelven todos los campos de los documentos coincidentes. Para mejorar el rendimiento y hacer la salida más limpia, puede especificar qué campos devolver. Esto se llama proyección.

La proyección se maneja con el segundo argumento en el método find(). Este argumento es un documento donde especifica los campos a incluir con un 1 o excluir con un 0.

Recuperemos todos los libros pero solo devolvamos sus campos title y author. El primer argumento, {}, es un filtro vacío, que coincide con todos los documentos.

db.books.find({}, { title: 1, author: 1 });

Notará que el campo _id todavía está incluido en la salida. El campo _id siempre se devuelve por defecto. Para excluirlo, debe establecerlo explícitamente en 0.

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

Ahora la salida será mucho más limpia, conteniendo solo los campos solicitados:

[
  { "title": "Python Basics", "author": "John Smith" },
  { "title": "MongoDB Essentials", "author": "Jane Doe" },
  { "title": "Web Development", "author": "Alice Johnson" }
]

Puede combinar un filtro de consulta con una proyección. Por ejemplo, busquemos libros publicados en 2023 y devolvamos solo sus títulos.

db.books.find({ year: 2023 }, { title: 1, _id: 0 });

Esta potente característica le permite adaptar los resultados de la consulta exactamente a lo que su aplicación necesita, reduciendo la transferencia de datos innecesaria.

Ordenar, Omitir y Limitar Resultados

A menudo, necesita controlar el orden y la cantidad de los resultados devueltos por una consulta. MongoDB proporciona métodos de cursor que puede encadenar a una consulta find() para ordenar, omitir y limitar los documentos en el conjunto de resultados.

Para ordenar los resultados, use el método .sort(). Toma un documento que especifica el campo por el cual ordenar y la dirección: 1 para ascendente y -1 para descendente. Ordenemos los libros por año en orden descendente (los más nuevos primero).

db.books.find().sort({ year: -1 });

Para limitar el número de documentos devueltos, use el método .limit(). Por ejemplo, para obtener solo los 2 libros más nuevos:

db.books.find().sort({ year: -1 }).limit(2);

El método .skip() se utiliza para omitir un número especificado de documentos desde el principio del conjunto de resultados. Esto es útil para implementar la paginación. Recuperemos todos los libros, pero omitamos el primero.

db.books.find().sort({ year: 1 }).skip(1);

Puede encadenar estos métodos para crear consultas potentes y precisas. Por ejemplo, para encontrar el segundo libro más antiguo de la colección, puede ordenar por año ascendente, omitir el primer resultado y limitar la salida a uno.

db.books.find().sort({ year: 1 }).skip(1).limit(1);

Este comando devolverá el libro "Python Basics", que fue publicado en 2022.

Finalmente, para salir del shell de MongoDB, escriba exit o presione Ctrl+D.

exit;

Resumen

En este laboratorio, ha aprendido los fundamentos de la escritura de consultas básicas en MongoDB. Comenzó conectándose a una base de datos con el shell mongosh e insertando documentos en una colección. Luego practicó la recuperación de documentos usando find(), filtrando resultados con coincidencias exactas y operadores de comparación como $gt y $in, y utilizando la proyección para seleccionar campos específicos. Finalmente, aprendió a formatear la salida encadenando métodos de cursor como .sort(), .limit() y .skip() para controlar el orden y el tamaño de su conjunto de resultados. Estas habilidades forman la base para interactuar y administrar datos en MongoDB.