https://www.mongodb.com/try/download/shell
https://www.mongodb.com/try/download/database-tools
Siguiente, siguiente...
Siguiente, siguiente...
mongod --version # verifico que mi servidor instalado y configurado
Nota: si el comando no es encontrador. Colocar la carpeta de los binarios en las variables de entorno del sistema operativo. Colocar en el path.
C:\Program Files\MongoDB\Server\6.0\bin
mongosh --version # verifico que tenga instalado y configurado
mongodump --version # verifico que tenga instalado y configurado
Nota: si el comando no es encontrador. Colocar la carpeta de los binarios en las variables de entorno del sistema operativo. Colocar en el path.
C:\Program Files\MongoDB\Tools\100\bin
https://www.mongodb.com/docs/manual/reference/program/mongod/
mongod
IMPORTANTE: Si no queda tomada la consola. Tengo que crear los siguientes (directorios/carpetas). C:\data\db (O sea crear data dentro del disco C: y dentro de data la carpeta db)
Levantar MongoD en una carpeta personalizada
mongod --dbpath="D:\mis_bases_de_datos\nombre"
Acuerdense que tiene que estar levantado el servidor mongod
mongosh
Si no lo tengo levantado el error:
Current Mongosh Log ID: 637ead1554cbe0578d0d7099
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.5.4
Using MongoDB: 6.0.2
Using Mongosh: 1.5.4
https://www.mongodb.com/docs/drivers/
show dbs
use <nombre-de-la-base-de-datos>
use db-mongo
Nota: Tener en cuenta que la base de datos se crea en memoria hasta que no se crea alguna colección.
Nota: Tengo que estar posicionado dentro de la DB. A la cual le quiero agregar una colección
# Creo una colección en forma implicita
db.createCollection('<nombre-de-colección>')
db.createCollection('productos')
# Creo una colección en forma explicita
db.<nombre-colección>.insertOne({})
db.productos.insertOne({nombre: 'TV', precio: 1234})
db.clientes.insertMany([{},{},{}]) # Tengo que colocar los documentos dentro de un ARRAY
db.productos.insertMany(
[
{nombre: "Heladera", precio: 231},
{nombre: "Microondas", precio: 2331},
{nombre: "Monitor", precio: 3233},
{nombre: "Notebook", precio: 2311},
{nombre: "Zapatilla", precio: 441},
]
)
Cada vez que inserto un documento, se crea automaticamente el ObjectID. Este filed es único. No se repite.
https://www.mongodb.com/docs/manual/reference/method/ObjectId/
Conversor de ObjectID a Timestamp https://nddapp.com/object-id-to-timestamp-converter.html
db.clientes.find() # Me lista todos los documentos dentro de la colección clientes
db.clientes.find({})
db.productos.find({ nombre: 'Cocina' })
db.productos.find({ nombre: /cocina/i }) # Utilizo una regex para buscar tanto en mayuscula como en minuscula cocina
Otra forma de hacer filtros con regex
https://www.mongodb.com/docs/manual/reference/operator/query/regex/
db.productos.find(
{
nombre: {
$regex: 'cocina',
$opciones: 'i'
}
}
)
https://regexr.com/ https://regex101.com/
mongod
Otra manera de levantar el servidor local
mongod --dbpath="D:\mis_bases_de_datos\nombre"
Se conecta por defecto a esta URI: mongodb://127.0.0.1:27017/
mongosh
show dbs
show collections
db
db.usuarios.find({nombre: /o$/}) # Todos los que terminan con o
db.usuarios.find({nombre: /^A/}) # Todos los que empiezan con A
Ejemplo de uso con $regex
const search = 'A'
db.usuarios.find(
{
nombre: {
$regex: `^${search}`,
$options: 'i' # No es obligatorio pero le puedo pasar optiones (Flags)
}
}
)
https://www.mongodb.com/docs/manual/reference/operator/query/and/
db.usuarios.find(
{
$and: [
{nombre: 'Adrian'},
{edad: 23}
]
}
) # Si los patrones de búsqueda se cumplen va a mostrar los documentos que cumplen con ambas
db.usuarios.find(
{
$or: [
{nombre: 'Adrian'},
{edad: 27}
]
}
) # Busca uno u otro de los patrones. No necesariamente se tienen que cumplir ambos patrones
https://www.mongodb.com/docs/manual/reference/operator/query/gt/
db.usuarios.find(
{
edad: { $gt: 29 }
}
) # Busca en el field edad los mayores a 29
db.usuarios.find(
{
edad: { $gt: 29 }
}
) # Busca en el field edad los mayores e iguales a 29
db.usuarios.find(
{
edad: { $lt: 29 }
}
) # Busca en el field edad los menores a 29
db.usuarios.find(
{
edad: { $lte: 29 }
}
) # Busca en el field edad los menores o iguales a 29
db.usuarios.find(
{
nombre: {
$ne: 'Gabriel'
}
}
)
db.usuarios.find(
{
edad: {
$in: [24, 27, 26]
}
}
)
db.usuarios.find(
{
edad: {
$nin: [24, 27, 26]
}
}
)
db.usuarios.find({}).sort(
{
nombre: -1 # Todos los documentos ordenados de la z-a
}
)
db.usuarios.find({}).sort(
{
nombre: 1 # Todos los documentos ordenados de la a-z
}
)
Caso de uso: Todos los documentos mayores a 26 ordenados de menor a mayor
db.usuarios.find(
{
edad: {
$gte: 26
}
}
).sort(
{
edad: 1
}
)
db.usuarios.find({}).limit(3)
db.usuarios.find({}).skip(3)
Caso de uso: Hacer un paginado
db.usuarios.find({}).limit(5).skip(0)
db.usuarios.find().size()
db.usuarios.countDocuments()
Nota: Por defecto siempre muestra el ObjectID
db.usuarios.find({}, {edad: 1}) # Me muestra solo la edad con el ObjID.
db.usuarios.find({}, {nombre: 1, _id: 0}) # Solo muestra nombre
db.usuarios.find({}, {edad: 0, _id: 0}) # Solo muestra nombre
mongod
Si quiero levantar en una carpeta personalizada
mongod --dbpath="D:\mis_bases_de_datos\nombre"
mongosh
show dbs
Ir a MONGO ATLAS y buscar en el cluster el botón CONNECT y elegir la opción de conexión MONGOSH
mongosh "mongodb+srv://digitalers.2xyfw8q.mongodb.net/<la-base-datos>" --apiVersion 1 --username <su-usuario>
Ejemplo
mongosh "mongodb+srv://digitalers.2xyfw8q.mongodb.net/mybd" --apiVersion 1 --username mprincipe
Abro Mongo DB Compass
La URI para conectarse:
LOCAL
mongodb://localhost:27017
REMOTO
db.usuarios.find(
{
nombre: {
$exists: false # $exists en false me muestra todos los docuemntos que no tengan el field: nombre
}
}
)
db.usuarios.find(
{
edad: {
$exists: true # $exists en true me muestra todos los docuemntos que tengan como field: edad
}
}
)
El deleteOne, borra solo el primer documento que encuentre.
IMPORTANTE: Siempre hacer un FIND con el filtro que quiero utilziar y luego hacer DELETE
db.usuarios.deleteOne(
{
nombre: 'Gabriel' # Solo borra un usuario que coincida con el nombre Gabriel.
}
)
db.usuarios.deleteMany(
{
edad: {
$gte: 28 # Borra todos los mayores o iguales de 28 años.
}
}
)
Actualizar el primer documento que encuentre, si hay más documentos, solo actualiza el primero.
db.usuarios.updateOne({<filtro/busqueda>}, {<info-con-la-cual-quiero-actualizar-el-documento>})
db.usuarios.updateOne(
{edad: 24},
{
$set: {
activo: true
}
}
) # Busca persona una persona con la edad: 24 y la actualiza
db.usuarios.updateMany(
{},
{
$set: {
activo: true,
}
}
) # Sin filtro, intervengo sobre todos los documentos. (Le agrego el field: activo en true)
db.usuarios.updateMany(
{},
{
$set: {
altura: 1.7,
peso: 85
}
}
) # Le agrego a todos los documentos, los fields altura y peso
Otro ejemplo
db.usuarios.updateMany(
{
_id: ObjectId("6381528166a059a9557820aa")
},
{
$set: {
activo: false,
altura: 1.8,
peso: 95
}
}
) # Filtra por Obj ID y le actualiza los fields.
db.usuarios.updateOne(
{
_id: ObjectId("6381528166a059a9557820aa")
},
{
$unset: {
peso: 95
}
}
) # Le quito el field peso a un documento en particular
db.usuarios.updateMany(
{ },
{
$unset: {
peso: ""
}
}
) # Le quito el field peso a todos los documentos
Crear un backup de mis bases de datos y colecciones
https://www.mongodb.com/docs/database-tools/mongodump/
mongodump --db <base-de-datos>
Ejemplo
mongodump --db mybd
db.<nombre-coleccion>.drop
Ejemplo
use mybd
db.usuarios.drop()
Nos permite recuperar una backup desde la carpeta dump
https://www.mongodb.com/docs/database-tools/mongorestore/
mongorestore --nsInclude=<nombre-base-datos>.<coleccion> <carpeta-donde-tengo-los-dump>
mongorestore --db mybd dump\mybd
mongorestore --nsInclude=mybd.usuarios dump
mongorestore --nsInclude=mybd.* dump # Recupero de la DB mybd. Todas las colecciones
mongoimport --db=mybd --collection=mock --jsonArray --file MOCK_DATA.json
mongod
Levantar MONGODB en un directorio particular
mongod --dbpath="./db-62313"
mongosh
Conectarme a MONGO ATLAS
mongosh "mongodb+srv://digitalers.2xyfw8q.mongodb.net/edit" --apiVersion 1 --username mprincipe
- MongoDB for VS Code
db
mongorestore --nsInclude=<nombre-base-datos>.<collection> <carpeta-donde-tengo-los-dump>
mongorestore --nsInclude=mybd.* dump # Todas las colecciones de DB, mybd
mongoimport --db=mybd --collection=autos --jsonArray --file MOCK_DATA.json
Si no es un json que tiene un array
mongoimport --db=mybd --collection=autos --file personas.json
Me permite generar json para utilizar de prueba en mis aplicaciones
https://www.mockaroo.com/ https://mockapi.io/projects
wget -O personas.json https://615d8b5212571a00172076ba.mockapi.io/personas
El cursor es un elemento que me permite ir obteniendo todos los documentos de una búsqueda, no en forma completa, sino de a paquete de documentos. El cursor una vez consumido, no tiene más información. Se agota!
let cursor = db.personas.find()
cursor.forEach(function(d) { print(d) }) # EN ALGUNAS VERSIONES ANTIGUAS NO REPRESENTE LA INFO
cursor.forEach(function(d) { printjson(d) })
cursor.forEach(function(d) { printjson(tojson(d)) }) # DEPRECADO PARA LAS ULTIMAS VERSIONES
cursor.forEach(printjson) # DEPRECADO PARA LAS ULTIMAS VERSIONES
load('cmd0.js')