Uso de Tipos Básicos de MongoDB

MongoDBBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a trabajar con varios tipos de datos fundamentales en MongoDB. El laboratorio cubre ejemplos prácticos de cómo almacenar, consultar y manipular datos utilizando números, cadenas (strings), booleanos, fechas y ObjectIds. Obtendrá experiencia práctica realizando operaciones comunes de bases de datos y comprendiendo los casos de uso apropiados para cada tipo de dato. Al final de este laboratorio, tendrá una base sólida para modelar 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 100%. Ha recibido una tasa de reseñas positivas del 83% por parte de los estudiantes.

Trabajando con Números y Cadenas

En este primer paso, aprenderá a utilizar los tipos de datos más comunes: números y cadenas (strings). Iniciará la shell de MongoDB, creará una base de datos y una colección, y luego insertará y consultará documentos que contengan estos tipos.

Primero, abra su terminal e inicie la shell de MongoDB. Este entorno interactivo le permite ejecutar comandos directamente contra su base de datos.

mongosh

Una vez dentro de la shell, verá un prompt >. Vamos a crear y cambiar a una nueva base de datos llamada inventory. En MongoDB, una base de datos se crea automáticamente cuando almacena datos en ella por primera vez.

use inventory

Ahora, cree una colección llamada products e inserte un documento. Este documento contendrá un campo de cadena (string) (name) y dos campos numéricos (price y stock). MongoDB utiliza tipos BSON (Binary JSON), donde los números pueden ser enteros o de punto flotante (doubles).

db.products.insertOne({
    name: "Laptop",
    price: 1200.50,
    stock: 50
})

Debería ver un mensaje de confirmación con el ObjectId del documento recién insertado.

Salida de ejemplo:

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Ahora que el documento está insertado, consultemos la colección. Primero, busque productos con un precio mayor a 1000 utilizando el operador $gt (greater than - mayor que).

db.products.find({ price: { $gt: 1000 } })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Laptop',
    price: 1200.5,
    stock: 50
  }
]

A continuación, realice una consulta para encontrar un producto por su nombre exacto, que es un valor de cadena (string). Esta es una forma común de recuperar elementos específicos.

db.products.find({ name: "Laptop" })

Este comando devolverá el mismo documento, demostrando cómo consultar basándose en campos de cadena (string).

Uso de valores booleanos y nulos

En este paso, explorará los tipos de datos booleanos y nulos. Los booleanos son ideales para campos que representan un estado verdadero o falso, como indicadores (flags). El tipo nulo se utiliza para representar un campo sin valor.

Continuemos utilizando la base de datos inventory en la shell de mongosh. Inserte un nuevo producto con los campos booleanos inStock y onSale, y un campo discontinuedDate establecido en null.

db.products.insertOne({
    name: "Wireless Mouse",
    price: 25,
    inStock: true,
    onSale: false,
    discontinuedDate: null
})

Salida de ejemplo:

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Ahora tiene un documento con valores booleanos y nulos. Puede consultarlos como cualquier otro tipo de dato. Busquemos todos los productos que están actualmente en stock consultando el valor booleano true.

db.products.find({ inStock: true })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Wireless Mouse',
    price: 25,
    inStock: true,
    onSale: false,
    discontinuedDate: null
  }
]

Este comando recupera documentos donde el campo inStock es exactamente true. A continuación, busquemos productos que no han sido descontinuados buscando un valor null en el campo discontinuedDate. Tenga en cuenta que en MongoDB, la consulta de null coincide tanto con los documentos donde el campo está explícitamente establecido en null como con los documentos donde el campo no existe en absoluto.

db.products.find({ discontinuedDate: null })

Esta consulta devolverá varios documentos: el "Wireless Mouse" (que tiene discontinuedDate: null) y cualquier otro producto que no tenga un campo discontinuedDate en absoluto (como "Laptop"). Si desea encontrar solo los documentos donde el campo está explícitamente establecido en null, necesitará usar un patrón de consulta diferente.

Almacenamiento de Fechas y Marcas de Tiempo

Este paso se centra en el tipo de dato Date (Fecha), que es esencial para almacenar información basada en el tiempo, como fechas de creación, actualizaciones o eventos. MongoDB almacena las fechas como enteros de 64 bits que representan milisegundos desde la época Unix (1 de enero de 1970, UTC).

Insertemos un documento con campos de fecha. Puede crear un objeto de fecha para la hora actual usando new Date() o para una hora específica pasando una cadena de fecha ISO-8601.

db.products.insertOne({
    name: "Smartwatch",
    price: 250,
    purchaseDate: new Date("2023-10-26T10:00:00Z"),
    lastUpdated: new Date()
})

Salida de ejemplo:

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Ahora, consultemos productos basándonos en sus campos de fecha. Por ejemplo, busque todos los productos comprados en o después del inicio de 2023. Puede usar el operador $gte (greater than or equal to - mayor o igual que) con un objeto Date.

db.products.find({
    purchaseDate: { $gte: new Date("2023-01-01") }
})

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Smartwatch',
    price: 250,
    purchaseDate: ISODate('2023-10-26T10:00:00.000Z'),
    lastUpdated: ISODate('...')
  }
]

MongoDB también proporciona operadores de actualización para fechas. El operador $currentDate es útil para establecer un campo a la fecha actual del servidor. Actualicemos el campo lastUpdated para el documento "Laptop" que creó anteriormente para rastrear cuándo se modificó por última vez.

db.products.updateOne(
    { name: "Laptop" },
    { $currentDate: { lastUpdated: true } }
)

Salida de ejemplo:

{
  "acknowledged": true,
  "insertedId": null,
  "matchedCount": 1,
  "modifiedCount": 1,
  "upsertedCount": 0
}

Esta operación encuentra el documento con el nombre "Laptop" y actualiza su campo lastUpdated a la marca de tiempo actual.

Comprensión de ObjectIds y Arrays

En este último paso, aprenderá sobre dos tipos estructurales importantes: ObjectId y Array (Arreglo). Cada documento en MongoDB tiene un campo _id único, que por defecto es un ObjectId si no se proporciona. Los arreglos le permiten almacenar listas de valores dentro de un solo campo.

Primero, insertemos un documento con un campo de arreglo llamado tags (etiquetas). Esto es útil para almacenar múltiples categorías o atributos.

db.products.insertOne({
    name: "Mechanical Keyboard",
    price: 75,
    tags: ["gaming", "mechanical", "RGB"]
})

Salida de ejemplo:

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

El insertedId es el ObjectId de este nuevo documento. Es un valor de 12 bytes que garantiza la unicidad. Puede consultar un documento por su _id. Primero, encuentre el documento y almacene su _id en una variable.

const keyboard = db.products.findOne({ name: "Mechanical Keyboard" })
const keyboardId = keyboard._id

Ahora, use esta variable keyboardId para recuperar el documento nuevamente. Esta es la forma más eficiente de recuperar un solo documento específico.

db.products.findOne({ _id: keyboardId })

A continuación, trabajemos con el arreglo tags. Puede consultar documentos donde el arreglo contenga un elemento específico. Por ejemplo, para encontrar todos los productos etiquetados con "gaming":

db.products.find({ tags: "gaming" })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Mechanical Keyboard',
    price: 75,
    tags: [ 'gaming', 'mechanical', 'RGB' ]
  }
]

Este comando encuentra eficientemente todos los documentos donde el arreglo tags incluye la cadena "gaming". Los arreglos son una característica potente para modelar relaciones dentro de un solo documento. Para salir de la shell de MongoDB, escriba exit o presione Ctrl+D.

exit

Resumen

En este laboratorio, ha aprendido a trabajar con los tipos de datos más esenciales en MongoDB. Comenzó utilizando números y cadenas para almacenar y consultar información de productos. Luego exploró los booleanos y el valor nulo para representar indicadores de estado y datos faltantes. También aprendió a manejar datos temporales utilizando el tipo Date y sus operadores asociados. Finalmente, adquirió una comprensión del ObjectId como identificador único y del tipo Array para almacenar listas de valores. Este conocimiento proporciona una base sólida para diseñar e interactuar con bases de datos MongoDB para una amplia gama de aplicaciones.