- Como empezar
- CRUD
- Funciones
- Avanzado
- Expresiones regulares - .find ( { } )
Para iniciar el servidor primero es necesario una serie de pasos para poder usar los comandos de MongoDB
- Configurar MongoDb para su uso
- Ir a la unidad c:
- crear carpetas: data/db
- Configurar el cmd para usar comandos de MondoDB
- Copiar la ruta bin en la carpeta de instalacion de MongoDB
- Default C:\Program Files\MongoDB\Server\4.0\bin
- Seguir la ruta panel de control > Sistema y seguridad > Sistema
- Entrar a Configuracion Avanzada del Sistema
- Variables de Entorno > Nuevo
- Nombre: MongoDB | Valor: Ruta de carpeta bin
- Copiar la ruta bin en la carpeta de instalacion de MongoDB
Si todo salio bien ya puedes acceder a los comandos de MongoDb desde el CMD
mongod
2019-06-15T13:19:01.725-0500 I NETWORK [initandlisten] waiting for connections on port 27017
Esto significa que el servidor ya esta activo
Para ingresar los comandos se necesita abir otra terminal de comandos ya que esta esta ocupada con el servidor
Para ingresar todos los comandos tenemos que activar los comandos de MongoDB
mongo
Con esto ya podemos empezar a ingresar comandos
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> use Pruebas
switched to db Pruebas
Si la DB no existe entonces se va ha crear, pero esta no aparecera en la lista de DB hasta que se carguen datos en esta
> db
Pruebas
db.coleccion.insert( { documento })
db.nombreColeccion.insert([{ documento1 }, { documento2 }, ...])
> db.persona.insert({
... "nombre": "Alan",
... "apellido": "Vazquez",
... })
WriteResult({ "nInserted" : 1 })
Se pueden insertar varias lineas en la terminal mientras no se cierren los parentesis de la funcion
En caso de que no exista la Coleccion en la que se quieren insertar datos se crea la Coleccion
db.createCollection("nombreColeccion")
> db.createCollection("productos")
{ "ok" : 1 }
> show collections
persona
productos
db.nombreColeccion.drop()
> db.productos.drop()
true
> db.dropDatabase()
{ "dropped" : "Pruebas", "ok" : 1 }
db.nomreColeccion.insert({ nombreValor : valor, ...})
> db.persona.insert({ nombre: "Alan", edad: 20 })
WriteResult({ "nInserted" : 1 })
Se pueden omitir las comillas en los nombres de los campos.
MongoDB inserta un id por defaul cuando este se omite
"_id": ObjectId("<<Hash>>")
En caso de que se tenga un id personalizado para el documento es preferible usar el del documento.
se tiene que especificar como {"_id": <<Valor_Unico>>}
Se pueden insertar diferentes campos en la misma coleccion
Cada documento puede tener sus propios campos distintos sin necesidad de alterar a los demas, como en caso de SQL
db.nombreColeccion.insert ( [ { documento1}, { documento2 }, { ... } ] )
> db.persona.insert([
... {
... nombre: "Isaac",
... edad: 20,
... activo: true
... },
... {nombre: "Fernanda",
... edad: 21
... }])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
db.nombreColeccion.insert ( { nombreArreglo : [ valor1, valor2, ... ] } )
> db.prueba.insert([
... {nombre: "test 1", miArreglo: [1, 5, 7, 9] },
... {nombre: "test 2", miArreglo: [8, 4, 3] }
... ] )
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
db.nombreColeccion.find()
> db.persona.find()
{ "_id" : ObjectId("5d057016581553215508f3bc"), "nombre" : "Alan", "edad" : 20 }
{ "_id" : ObjectId("5d057354581553215508f3bd"), "nombre" : "Isaac", "edad" : 20, "activo" : true }
{ "_id" : ObjectId("5d057354581553215508f3be"), "nombre" : "Fernanda", "edad" : 21 }
db.nombreColeccion.findOne()
> db.persona.findOne()
{
"_id" : ObjectId("5d057016581553215508f3bc"),
"nombre" : "Alan",
"edad" : 20
}
db.nombreColeccion.find( { parametrosBusqueda } )
> db.persona.find({edad:20})
{ "_id" : ObjectId("5d057016581553215508f3bc"), "nombre" : "Alan", "edad" : 20 }
{ "_id" : ObjectId("5d057354581553215508f3bd"), "nombre" : "Isaac", "edad" : 20, "activo" : true }
Se pueden insertar los parametros que se desee dentro de los mismo corchetes separando por ","
db.nombreColeccion.find( { parametrosBusqueda }, { campo1 : 1, campo2 : 0, ... } )
Se especifica un 0 o false para excluir el valor
Se especifica un 1 o true para mostrar el valor
> db.persona.find({}, {_id:0})
{ "nombre" : "Alan", "edad" : 20 }
{ "nombre" : "Isaac", "edad" : 20, "activo" : true }
{ "nombre" : "Fernanda", "edad" : 21 }
> db.persona.find({}, {nombre:1})
{ "_id" : ObjectId("5d057016581553215508f3bc"), "nombre" : "Alan" }
{ "_id" : ObjectId("5d057354581553215508f3bd"), "nombre" : "Isaac" }
{ "_id" : ObjectId("5d057354581553215508f3be"), "nombre" : "Fernanda" }
El _id siempre se mostrara al menos que se excluya manualmente
db.nombreColeccion.find().pretty()
> db.persona.find().pretty()
{
"_id" : ObjectId("5d057016581553215508f3bc"),
"nombre" : "Alan",
"edad" : 20
}
{
"_id" : ObjectId("5d057354581553215508f3bd"),
"nombre" : "Isaac",
"edad" : 20,
"activo" : true
}
{
"_id" : ObjectId("5d057354581553215508f3be"),
"nombre" : "Fernanda",
"edad" : 21
}
db.nombreColeccion.find.().forEach( bloqueDeFunciones )
Recorre la lista de documentos de una coleccion
> db.cicloFor.find().forEach(
... function(d){ print( d.valor ) }
... )
0
1
2
3
...
100
db.nombreColeccion.find.().count()
> db.cicloFor.find().count()
101
db.nombreColeccion.find.().sort( { campoOrdenar : [1/-1] } )
> db.orden.insert([
... {valor: "f"},
... {valor: "c"},
... {valor: "a"},
... {valor: "ab"},
... {valor: "aa"}
... ])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 5,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
> db.orden.find({},{_id: 0}).sort({valor:1})
{ "valor" : "a" }
{ "valor" : "aa" }
{ "valor" : "ab" }
{ "valor" : "c" }
{ "valor" : "f" }
> db.orden.find({},{_id: 0}).sort({valor:-1})
{ "valor" : "f" }
{ "valor" : "c" }
{ "valor" : "ab" }
{ "valor" : "aa" }
{ "valor" : "a" }
Indicar el valor en el campo segun el orden deseado:
1 = ascendente
-1 = descendente
db.nombreColeccion.find.().limit( numeroValoresMostrar )
> db.prueba.find({},{_id:0}).limit(5)
{ "valor" : 1 }
{ "valor" : 2 }
{ "valor" : 3 }
{ "valor" : 4 }
{ "valor" : 5 }
db.nombreColeccion.find.().skip( numeroValoresOmitir )
> db.prueba.find({},{_id:0}).skip(10).limit(5)
{ "valor" : 11 }
{ "valor" : 12 }
{ "valor" : 13 }
{ "valor" : 14 }
{ "valor" : 15 }
db.nombreColeccion.find.( ).skip( numeroValoresOmitidos ).size( )
> db.prueba.find({},{_id:0}).sort({valor:1}).skip(10).size()
90
> db.prueba.find({},{_id:0}).skip(10).count()
100
count: Devuelve el numero total de documentos encontrados dentro el metodo find()
size: Devuelve el numero de documentos restantes dentro del skip [size = count - skip]
db.nombreColeccionfind( { }, { nombreArreglo : {$slice : numeroElementos } } )
> db.prueba.find({},{_id:false}).pretty()
{
"miArreglo" : [
"C#",
"JavaScript",
"Python",
"Visual Basic",
"Java"
]
}
> db.prueba.find({},{_id:false, miArreglo: {$slice: 3}})
{ "miArreglo" : [ "C#", "JavaScript", "Python" ] }
> db.prueba.find({},{_id:false, miArreglo: {$slice: -3}})
{ "miArreglo" : [ "Python", "Visual Basic", "Java" ] }
> db.prueba.find({},{_id:false, miArreglo: {$slice: [1, 3]}})
{ "miArreglo" : [ "JavaScript", "Python", "Visual Basic" ] }
db.nombreColeccion.find( _{ nombreArreglo : { $in : [ valoresBusqueda ] } )
Para negra la busqueda, excluir las concidencias usar: $nin
> db.prueba.find({},{_id:false}).pretty()
{
"miArreglo" : [
"C#",
"JavaScript",
"Python",
"Visual Basic",
"Java"
]
}
> db.prueba.find({miArreglo: {$in: ["C#", "SQL"]} }, {_id: false} )
{ "miArreglo" : [ "C#", "JavaScript", "Python", "Visual Basic", "Java" ] }
Solo es necesario una concidencia de todos los parametros de busqueda para que este retorne el documento
db.nombreColeccion.save( { _id o documento }, { campoNombre : nuevoValor } )
> db.persona.save( { "_id" : ObjectId("5d057016581553215508f3bc") }, { edad : 30 })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Se debe indicar el campo "_id" porque sino se va ha crear un nuevo documento.
No basta con que los campos de busqueda sean unicos
En caso de que el campo ha actualizar no exista este se va ha agregar
db.nombreColeccion.update(
{ valoresBusqueda },
{ $set : { valoresModificar, ValoresCrear }, $unset : {campoEliminar : valorEliminar} },
{ multi: boolean } )
$set: Establece que solo es campo se va ha modificar o crear.
Sino se coloca esta expresion se tendra que ingresar el documento completo
$unset: Elimina los campos que concidan con el valor indicado
multi: Inidica que se van ha modificar todos los documentos que concidan con los campos de la busqueda en caso de que su valor sea "true".
Sino se especifica el valor por default es "false" por lo que solo se modificara el primer documento que se encuentre
> db.persona.update({nombre: "Fernanda"}, {edad: 23, activo: true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.nombreColeccion.update(
{ valoresBusqueda },
{ $push : { valoresAñadir } )
db.nombreColeccion.update( { },
{ $addToSet : { valoresAñadir } )
> db.prueba.find({}, {_id:0})
{ "nombre" : "test , "miArreglo" : [ 8, 4, 3] }
> db.prueba.update( {}, {$addToSet: {miArreglo: 2} })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.prueba.find({}, {_id:0})
{ "nombre" : "test 1", "miArreglo" : [ 8, 4, 3, 2] }
> db.prueba.update( {}, {$addToSet: {miArreglo: [6, 0]} })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.prueba.find({}, {_id:0})
{ "nombre" : "test 1", "miArreglo" : [ 8, 4, 3, 2, [ 6, 0 ] ] }
Si el elemento ya existe dentro del Array este ya no se volvera ha agregar.
$push: permite agregar elementos existentes en el array
db.nombreColeccion.update( { }, { $push : { nombreArreglo : { $each : [ valor1, valor2, ... ] } )
> db.prueba.find({}, {_id:0})
{ "nombre" : "test 1", "miArreglo" : [ 8, 4, 3 ] }
> db.prueba.update( {},
... {$push: { miArreglo :
... {$each: [2, 3, 6] }
... } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.prueba.find({}, {_id:0})
{ "nombre" : "test 1", "miArreglo" : [ 8, 4, 3, 2, 3, 6 ] }
En lugar de usar $push tambien se peuede utilizar $addToSet
db.nombreColeccion.update( { }, { $push : { nombreArreglo : { $position : indiceArreglo } )
> db.prueba.find({}, {_id:0})
{ "nombre" : "test 1", "miArreglo" : [ 8, 4, 3 ] }
> db.prueba.update( {},
... {$push: { miArreglo :
... {$each: [2, 3, 6], $position: 1}
... } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.prueba.find({}, {_id:0})
{ "nombre" : "test 1", "miArreglo" : [ 8, 2, 3, 6, 4, 3 ] }
El metodo $position solo esta disponible con $push
db.nombreColeccion.update( { }, { $push : { nombreArreglo : { $sort : [1/-1] } )
> db.prueba.find({}, {_id:0})
{ "nombre" : "test 1", "miArreglo" : [ 8, 4, 3 ] }
> db.prueba.update( {},
... {$push: { miArreglo :
... {$each: [2, 3, 6], $sort: 1}
... } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.prueba.find({}, {_id:0})
{ "nombre" : "test 1", "miArreglo" : [ 2, 3, 3, 4, 6, 8 ] }
Este metodo se puede usar para ordenar el arreglo sino se le pasa ningun valor
db.nombreColeccion.update( { }, { $pull : { nombreArreglo : valorArreglo )
db.nombreColeccion.update( { }, { $pullAll : { nombreArreglo : [ valor1, valor2, ... ] )
> var arreglo = new Array();
> var tamanoArray = 20;
> for (i = 1; i <= tamanoArray; i++){
... arreglo.push(Math.round(Math.random()*100));
... }
> db.prueba.insert({nombre: "test 1", miArreglo: arreglo} )
WriteResult({ "nInserted" : 1 })
> db.prueba.find()
{ "_id" : ObjectId("5d08006569eac3f57c534494"), "nombre" : "test 1", "miArreglo" : [ 36, 80, 47, 14, 9 ] }
> db.prueba.find({}, {_id:0})
{ "_id" : ObjectId("5d0801d069eac3f57c534495"), "nombre" : "test 1", "miArreglo" : [ 36, 80, 47, 14, 9, 69, 92, 21, 22, 65, 4, 36, 9, 22, 34, 23, 59, 97, 33, 92 ] }
> db.prueba.find({}, {_id:0})
{ "_id" : ObjectId("5d0801d069eac3f57c534495"), "nombre" : "test 1", "miArreglo" : [ 36, 80, 47, 14, 9, 69, 92, 21, 22, 65, 4, 36, 9, 22, 34, 23, 59, 97, 33, 92 ] }
> db.prueba.update({}, {$pull: {miArreglo: {$gte: 50} } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.prueba.find({}, {_id: 0} )
{ "nombre" : "test 1", "miArreglo" : [ 36, 47, 14, 9, 21, 22, 4, 36, 9, 22, 34, 23, 33 ] }
Para eliminar varios valores manualmente se utiliza:
$pullAll: [valor1, valor2, ...]
db.nombreColeccion.remove( { camposBusqueda } )
A diferencia de la funcion update() la funcion remove() elimina todos los documentos que concidan con sus parametros de busqueda
> db.persona.remove({ "_id" : ObjectId("5d057016581553215508f3bc") })
WriteResult({ "nRemoved" : 1 })
var nombreVariable = script, funcion, documento, etc
Se puede asgnar un script a una variable y usarla cuando sea oportuno, como una funcion de una buqueda en especifico
> var test = db.persona.findOne({nombre: "Alan"})
> test
{
"_id" : ObjectId("5d057016581553215508f3bc"),
"nombre" : "Alan",
"edad" : 20
}
> test.edad
20
Se puede especificar el .edad debido a que hace uso de la funcion findOne().
Gracias a eso se puede acceder a los campos del resultado de la busqueda
Igualmente si se accede a un atributo que no existe este se crea
- $gt > (greater than)
- $gte >= (greater than equals)
- $lt < (less than)
- $lte <= (less than equals)
> db.persona.find({edad: {$gt: 20}}, {_id: 0})
{ "nombre" : "Fernanda", "edad" : 21 }
- $ne != (Negacion/diferente)
> db.persona.find({nombre: {$ne: "Alan"}}, {_id: 0, nombre: 1})
{ "nombre" : "Isaac" }
{ "nombre" : "Fernanda" }
for( varContador ; limiteCiclo ; aumento/decremento) { funciones }
> for(i = 0; i <= 100; i++){
... db.cicloFor.insert({valor: i})
... }
WriteResult({ "nInserted" : 1 })
Esto inserta valores del 0 al 100 en la coleccion cicloFor
db.nombreColeccion.aggregate( [ { $group : " nombreCampoAgrupar "} ] )
> db.peliculas.insert([
... {categoria: "accion", nombre: "2 Guns", valor: 100},
... {categoria: "accion", nombre: "Ant-Man", valor: 50},
... {categoria: "accion", nombre: "Avatar 3", valor: 150},
... {categoria: "Ciencia Ficcion", nombre: "Alien", valor: 200},
... {categoria: "Comedia", nombre: "The Adventure", valor: 300},
... {categoria: "Comedia", nombre: "Agua y Sal", valor: 250}
])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 6,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
> db.peliculas.aggregate( [ {$group : {_id: "$categoria"} } ] )
{ "_id" : "Comedia" }
{ "_id" : "Ciencia Ficcion" }
{ "_id" : "accion" }
> db.peliculas.aggregate( [ {$group : {_id: "$categoria", "repetidos": {$sum: 1}} } ] )
{ "_id" : "Comedia", "repetidos" : 2 }
{ "_id" : "Ciencia Ficcion", "repetidos" : 1 }
{ "_id" : "accion", "repetidos" : 3 }
> db.peliculas.aggregate( [ {$group : {_id: "$categoria", "repetidos": {$sum: 1}, "sumaValor": {$sum: "$valor" } } } ] )
{ "_id" : "Comedia", "repetidos" : 2, "sumaValor" : 550 }
{ "_id" : "Ciencia Ficcion", "repetidos" : 1, "sumaValor" : 200 }
{ "_id" : "accion", "repetidos" : 3, "sumaValor" : 300 }
> db.peliculas.aggregate( [ {$group : {
..._id: "$categoria",
..."repetidos": {$sum: 1},
..."sumaValor": {$sum: "$valor" },
...promedioValor: {$avg: "$valor"}
...} } ] )
{ "_id" : "Comedia", "repetidos" : 2, "sumaValor" : 550 }
{ "_id" : "Ciencia Ficcion", "repetidos" : 1, "sumaValor" : 200 }
{ "_id" : "accion", "repetidos" : 3, "sumaValor" : 300 }
> db.prueba.insert ([
... {correo: "alan@gmail.com"},
... {correo: "alan@outlook.com"},
... {correo: "test@live.mx"}
... ])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
/ texto /
Busca contenido ingresado en cualquier parte del texto
> db.prueba.find({correo: /@g/})
{ "_id" : ObjectId("5d08ec22ad79d8f46660eef4"), "correo" : "alan@gmail.com" }
/ texto$ /
Busca contenido ingresado al final del texto
> db.prueba.find({correo: /mx$/})
{ "_id" : ObjectId("5d08ec22ad79d8f46660eef6"), "correo" : "test@live.mx" }
/ ^ texto /
busca contenido ingresado al inicio parte del texto
> db.prueba.find({correo: /^a/})
{ "_id" : ObjectId("5d08ec22ad79d8f46660eef4"), "correo" : "alan@gmail.com" }
{ "_id" : ObjectId("5d08ec22ad79d8f46660eef5"), "correo" : "alan@outlook.com" }