Documentos de Académico
Documentos de Profesional
Documentos de Cultura
use database_name
Cabe aclarar que MongoDB no crea bases de datos vacías, si se quiere que la base de datos se
materialice se le debe de crear un documento.
Si queremos saber los métodos que podemos ejecutar sobre alguna entidad de mongo como
lo puede ser la base de datos o las colecciones, debemos invocar al método help()
//Muestra todas las funciones que podemos hacer a la base de datos en uso
db.help()
Esto se pude realizar a través del comando insertOne() en la shell de mongo. Al momento de
ejecutarlo el comando nos regresara si se creó o no el documento
db.inventory.insertOne({
// Document in JSON format
})
En este caso insertamos un objeto JSON con ciertos atributos a la colección inventory
db.inventory.insertOne({
item:"canvas",
qty:100,
tags:["cotton"],
size: {
h:28,
w:35.5,
uom:"cm"}
})
MongoDB tiene algo llamado atomicidad dentro de los documentos, quiere decir que cuando
se realiza una operación de escritura esta debe ser atómica. Es decir que si no se llega a
completar de manera correcta se realiza la operación de rollback, que es que el documento no
se guarde dentro de la base de datos. Esto nos garantiza que la operación no se realice de
forma parcial, como podría ser el escribir en el documento solo un campo, aunque los demás
tengan errores.
Búsqueda de documentos
En Mongo existen diferentes formas de buscar los documentos, podemos hacerlo a través de
filtros o directamente por el objectId. Para esto se utilizan dos métodos, find() y findOne().
find() Nos regresa uno o más documentos que cumplan con ciertas condiciones que
especifiquemos, si no especificamos ninguna condición de búsqueda nos regresara todos los
documentos de la colección.
//buscamos el documento con _id que sea igual a 5cfd49c9edbc9424e14849ae
//Como el id es único solo nos regresara un documento
db.inventory.find("5cfd49c9edbc9424e14849ae")
//Nos regresara todos los documentos donde el item sea igual a "canvas"
db.inventory.find({item: "canvas"})
findOne() Nos regresa solo un documento que cumpla con ciertas condiciones, si no
especificamos ninguna condición de búsqueda nos regresara el último documento
registrado en la colección. NOTA: Con findOne() no se puede utilizar pretty()
//buscamos el documento con _id que sea igual a 5cfd49c9edbc9424e14849ae
//Como el id es único solo nos regresara un documento
db.inventory.find("5cfd49c9edbc9424e14849ae")
//Nos regresara el último documento donde el item sea igual a "canvas"
db.inventory.find({item: "canvas"})
//Nos regresara el primer documento donde el item sea igual a "canvas"
db.inventory.findOne({item: "canvas"})
Como se puede observar existen muchísimas formas de poder buscar un documento gracias a
los filtros. Algo interesante de recordar es que los documentos que se almacenan en MongoDB
no se almacenan en forma de JSON, si no de BSON. Por lo que algunas veces cuando
realicemos búsquedas hay que tener en cuenta esto.
Por ejemplo, si nosotros realizamos la búsqueda de un documento a través de su ObjectId con
un filtro de la siguiente manera.
db.inventory.findOne({_id: 'quieroBuscarEsteObjectId'})
Algo importante de los querys en Mongo, es que en los filtros que hacemos podemos buscar
más de un parámetro, y podemos implementar algo muy útil en Mongo que son los Query and
Projection Operators, que son operadores que nos ayudan a que se cumplan condiciones
específicas dentro de los parámetros de nuestro query. Estos son denotados con el símbolo de
dólar $
Algunos ejemplos de estos operadores son
Operador
$eq Encuentra los valores que son iguales al valor de búsqueda
$gt Encuentra los valores que son mayores al valor de búsqueda
$gte Encuentra los valores que son mayores o iguales al valor de búsqueda
Encuentra cualquiera de los valores que coinciden con los elementos del
$in
array de búsqueda.
$lt Encuentra los valores que son menores al valor de búsqueda
$lte Encuentra los valores que son menores o iguales al valor de búsqueda.
$ne Encuentra los valores que no son iguales al valor de búsqueda.
Encuentra cualquiera de los valores que no coinciden con los elementos
$nin
del array de búsqueda.
NOTA: En sql server esto sería utilizado como OPERADORES DE COMPARACIÓN
Encuentra todos los documentos que tengan un estatus ‘A’ y que su cantidad sea menor a ‘30’
db.inventory.find( { status: "A", qty: { $lt: 30 } } )
Como en todo CRUD es necesario realizar la operacion de Actualizar (UPDATE), para eso
Mongo se vale de los métodos updateOne() y updateMany() que análogamente funcionan de
manera similar que findOne() y find().
La diferencia aquí consta en los parámetros que reciben estas funciones que actualizaran
nuestros documentos. La estructura es la siguiente
db.collectionName.updateOne(<filter>, <update>)
En el argumento de update ira los campos que deseemos actualizar, pueden ser uno o varios
los campos que podemos actualizar. Estos campos deben de ir después del operador $set
Si queremos actualizar la cantidad de un solo producto que cumpla con el filtro, entonces
podemos usar updateOne(). En este ejemplo actualizaremos el primer producto que tenga una
cantidad mayor a 10 en el inventario y le colocaremos un status “B”
db.inventory.updateOne({ qty: { $gt: 10 } },{ $set: { status: "B" } })
//Solo actualiza el primero que encuentre en el orden natural
//de registro en disco
En dado caso que quisiéramos que se actualizarán todos los productos con esa condición del
filtro se utilizaría updateMany()
db.inventory.updateMany({ qty: { $gt: 10 } },{ $set: { status: "B" } })
//Actualizaria todos los que cumplan la condicion del filtro
Una de las opciones más interesantes que tiene el update es la de upsert, si nosotros
activamos este parámetro la actualización se puede comportar como un insert en caso de que
el filtro no se cumpla.
Imaginemos que hacemos una actualización por id en nuestra colección, pero resulta que el id
no existe. Si no activamos la opción de upsert lo valores que pasamos para actualizar no
tendrán ningún efecto en la base de datos. Sin embargo, si el upsert está activo Mongo creará
un nuevo documento con esos datos.
db.inventory.update(
{ _id: "id_que_no_existe"},
{ $set: { qty: 40 } },
{ upsert: true }
)
Con la opción de upsert activa mongo nos creará un documento con el siguiente formato
{ "_id" : " id_que_no_existe ", "qty" : 40 }
Eliminación de documentos
Al igual que los otros métodos dentro de Mongo, existe el deleteOne() y deleteMany(). Estos
se comportan de manera muy similar a que findOne() y find(). Solo que al momento de cumplir
con la condición del filtro estos métodos eliminaran al documento.
//Elimina solo el primer documento que encuentre con el criterio del filtro
db.collectionName.deleteOne(filter)
//Elimina todos los documentos que encuentre con el criterio del filtro
db.collectionName.deleteMany(filter)
NOTA: En sql server sería: delete mitabla where cod=123
Eliminar el documento creado en anteriormente:
db.inventory.deleteOne({ _id : {$eq:" id_que_no_existe "} })
Aquí hay algunas recomendaciones que se pueden seguir para no comprometer nuestros datos
al hacer estas operaciones
Dejar que Mongo se haga cargo de la creación del id de nuestros documentos
Nunca hacer la operación delete sin antes poner un filtro. Esto lo único que causaría seria
eliminar todos los documentos de la colección.
Para poder verificar que nuestro filtro cumple con la condición que nosotros queremos,
podemos usar el método find() y verificar que documentos nos regresa.
Si llegamos a usar la opción upsert al momento de actualizar, es recomendable que lo que
actualicemos sea un esquema general de nuestro documento. Aunque MongoDB no
maneja esquemas, a veces es bueno implementarlos para tener una mejor organización
de nuestros datos.