Skip to content

Instantly share code, notes, and snippets.

@angelmmg90
Last active January 21, 2022 20:15
Show Gist options
  • Save angelmmg90/68aeaea97edfd09c03a4e7dc48f9fede to your computer and use it in GitHub Desktop.
Save angelmmg90/68aeaea97edfd09c03a4e7dc48f9fede to your computer and use it in GitHub Desktop.
MONGODB
COMANDOS DE MONGODB
use [nombre_bbdd] -> nos crea y nos cambia a la base de datos en la que vamos a operar
show databases -> muestra las bbdd que tenemos actualmente
db -> nos muestra la base de datos en la que estamos operando.
db.nombreColección.insert(usuario el registro que hayamos creado) -> nos inserta el registro que hemos creado anteriormente, la base de datos realmente no se crea hasta que no insertamos un registro.
show collections; -> nos muestra las colecciones(tablas) que tenemos creadas en la bbdd
db.nombrecolección.find() -> nos lista los registros de nuestra colección.
db.nombreColección.find().pretty() --> nos lista los registros de nuestra colección de una manera más organizada.
var nombreVariable = db.users.find({nombre : "Pepito"}).pretty() -> nos permite crear una variable con una consulta integrada, en este caso encontrar a un usuario llamado "Pepito"
db.nombreColeccion.find{nombreCampo : {$ne : valor }} --> mostraríamos todos los registros cuyo valor fuera distinto al valor indicado después del $ne
db.nombreColeccion.insert([registro1, registro2, registro3]) --> insertamos varios registros a la vez.
db.createCollection('test'); --> Creamos una colección
var test= db.nombreColeccion.findOne({nombre : "Pepito"}) -> guardamos la consulta de recoger un registro con el valor del campo que le indicamos en la variable creada
--> haciendo test.nombre listamos únicamente el nombre del registro.
--> haciendo test.nombre = "Otro nombre distinto" podemos ver como se cambia el nombre en el documento externo, pero no en la base de datos en sí, para poder realizar el cambio en nuestra base de datos es necesario hacer db.nombreColeccion.save(nombreVariable ó consulta)
realmente lo que hace save es comprobar el id del registro modificado con el que está en la base de datos, si el id del registro ya exite hace la modificación, sino lo que hace es crear un registro nuevo con su propio id.
--> si hacemos referencia a un registro y hacemos test.atributoNOExistente = valor --> lo que hacemos es crearle a ese registro ese atributo, con lo cual si hacemos un findOne() de ese registro veremos con se ha agregado el atributo, pero hay que recordar que esta modificación se ha hecho
en el registro del documento externo, no se ha hecho directamente en la BBDD, para ello podemos hacer el db.nombreColeccion.save(nombreVariable ó consulta) ó db.nombreColeccion.update({"nombreDeCampoParaEncontrarRegistro":"valor"}, nombreVariable ó consulta ó documento)
db.nombreColeccion.update({condicion}, documento)
db.nombreColeccion.update({condicion}, {$set : {campo:valor}}, {multi:true}) -> por defecto multi está a false, si lo ponemos a true ejecuta el update en todas las líneas que cumplan la condición
db.nombreColeccion.update({condicion}, {$unset : {campo:1}}, {multi:true}) -> por defecto multi está a false, si lo ponemos a true ejecuta el update en todas las líneas que cumplan la condición
db.nombreColeccion.remove({condicion}) --> borramos un registro en concreto
db.nombreColeccion.drop() --> borramos coleccion
db.dropDatabase() --> borramos bbdd
db.usuarios.find({}, { _id:false, valores : true}) -> evitamos que se muestre el id y mostramos el campo valores.
db.nombreColeccion.find({}, {nombre:1, _id:0}) -> mostramos todos los nombres del registro y evitamos que se muestre el id
db.your_collection.update({},{$set : {"new_field":1}},false,true) --> Agregamos un nuevo campo a los documentos ya creados (el primer booleano false corresponde a "upsert" y el segundo booleano true a "multi")
//Between
/*$gt > greater than
$gte >= greate than equals
$lt < less than
$lte <= less than equals*/
db.nombreColeccion.find({campo:{$gt:23, lt:30}}, {campoAmostrar:1, campoParaNomostrar:0}) --> buscamos un registro que esté entre los dos valores.
//Cursores
> for(i=0; i<100; i++){db.prueba.insert({value:i})} --> ingresamos 99 registros con valores que aumentan de uno en uno, cuando los mostramos mongoDB sólo mostrará los registros de 20 en 20
Los cursores solo son posibles usarlos una vez.
Son cosas posibles como:
var cursor = db.prueba.find()
> cursor.forEach( function(d){ d.value = 100; db.prueba.save(d);})
> var cursor = db.prueba.find()
> cursor.forEach( function(d){print(d.value)})
db.nombreColeccion.find().count() --> número de registros o documentos que hay en una colección.
db.nombreColeccion.find().sort({valor:1}) -> ordena los documentos de forma ascendente y con -1 de forma descendente.
db.nombreColeccion.find().sort({valor:1}).limit(3) -> con limit obtenemos un número de documentos limitados.
db.nombreColeccion.find().sort({valor:1}).skip(1).limit(3) -> con skip podemos saltarnos el primer documento pero seguir con el número de limitación (estaría bien para saber el producto más caro de la lista)
db.nombreColeccion.find().sort({valor:1}).skip(1).size() -> podemos saber el número de documentos una vez hecho el skip
//Arrays
var array = [1,2,3]
usuario = {nombre : "Pedro", valores : array}
db.usuario.insert(usuario)
db.usuario.update({}, {$addToSet:{valores : 4}}) --> agregamos al array el valor 4
db.usuario.update({}, {$push:{valores : 4}}) --> agregamos al array otro valor 4
db.usuario.update({}, {$push:{valores : {$each : [5,6]}}}) --> agregamos varios valores con el each (se puede usar también con el addToSet)
db.usuario.update({}, {$push:{valores : {$each : [5,6] , $position : 4}}}) --> agregamos varios valores con el each en la posición exacta que queremos (sólo funciona con el push)
db.usuario.update({}, {$push:{valores : {$each : [5,6] , $sort : 1}}}) --> agregamos varios valores con el each y se ordena el array, si sólo queremos ordenar el array no tenemos que pasar nada por el $each:[]
db.usuarios.update({}, {$pull : {valores : 4}}) --> eliminamos los valores que sean iguales a 4
db.usuarios.update({}, {$pull : {valores : ${gte : 5}}}) --> eliminamos los valores que sean mayores o igual a 5
db.usuarios.update({}, {$pullAll : {valores : [4,5]}}) --> eliminamos los valores 4 y 5 del array
db.usuarios.find({}, {_id:false, valores:{$slice:3}}) --> muestra los tres primeros elementos del array (con slice 1 obtenemos el primero elemento y con -1 el último elemento, también puedo indicar posiciones por ejemplo $slice:[1,3] --> desde la posición 1 a la 3)
db.usuarios.find({valores:{$in :[1]}}, {_id:false, valores:{$slice:3}}) --> en el apartado de condiciones podemos indicar que nos encuentre el/los documentos que contienen un valor en concreto, en este caso el valor 1 (a la inversa sería con $nin, devolveríamos los documentos que no tienen esos valores.)
//Renombrar un campo en todos los documentos de la colección
db.usuarios.updateMany( {}, { $rename: { "nmae": "name" } } ) --> Renombramos el campo nmae por name en todos los documentos.
//Documentos agrupados (Group)
db.usuarios.aggregate([{$group : {_id:"$puesto"}}]) -> nos muestra los elementos agrupados por puesto.
db.usuarios.aggregate([{$group : {_id:"$puesto", "repetidos":{$sum : 1}}}]) --> mostramos la cantidad de elementos por los cuales se agrupa
db.usuarios.aggregate([{$group : {_id:"$puesto", "repetidos":{$sum : 1}, "sum_salario":{$sum : "$sueldo"}}}]) --> agrupamos por puesto de trabajo y sumamos el salario de los mismos puestos de trabajo
db.usuarios.aggregate([{$group : {_id:"$puesto", "repetidos":{$sum : 1}, "avg_salario":{$avg : "$sueldo"}}}]) --> agrupamos por puesto de trabajo y mostramos el promedio salarial para esos puesto de trabajo.
//expresiones regulares
db.nombreColeccion.find( campo: /expresion regular/)
//documentos embebidos
documento_usuario = {nombre:"pepe", edad:"25"}
documento_salario = {salario:1500}
documento_usuario.documento_salario = documento_salario -> embembemos un documento dentro de otro
db.nombreColeccion.find({"subcoleccion.atributo":"valor"}) -> lo mismo para update o delete.
//relaciones uno a muchos
Se puede hacer con arrays o ir añadiendo un documento tras otro al documento padre
//elemMatch
db.nombreColeccion.find({documento : {$elemMatch : {subDocumento : valor}}}) --> se puede consultar varios valores a la vez
//subdocumento.$
db.nombreColeccion.find({"documento.atributo" : valor}, {_id : false, "subdocumento.$" : true}) -> nos permite buscar dentro de un array de un atributo de un documento.
//ObjectID
Si al crear un documento le ponemos en el atributo "_id" lo que haríamos sería machacar el valor que nos asigna mongoDB a nuestro ID de registro, pero es aconsejable
dejar el id por defecto de mongo ya que es un ID único y ya es un atributo indexado, se estructura de la siguiente manera.
58ecb4e2ee6923fa143101ff #12 bytes = 24 caracteres
0-3 bytes = timespan
4-6 bytes = identificador único de la máquina
7-8 bytes = PID
9-11 bytes = número incremental
//Create Collection (Validaciones de campos) -> si el documento no cumple con la validación nos dará un error 121
db.createCollection("MyCollection",
{
validator : { $and:
[
{nombre: {$type : "string"}},
{sexo: {$in : ["M", "F"]}},
{email: {$regex: /@/ }},
{"valor.nombre": {$type : "string"}}, -> para atributos de un subdocumento
{telefono: {$exists : false}} -> evitamos que se cree un campo con ese nombre
]
}
}
)
//indices
//Respaldo BBDD
en el directorio del programa, desde donde ejecutamos mongo ejecutamos el siguiente comando
mongodump --db [nombre_BBDD] -> hacer backup
mongorestore --db [ruta backup] -_> restaurar backup
mongodump --collection nombreColeccion --db nombreBBDD --> hacemos backup únicamente de la colección deseada.
mongorestore --collection nombreColeccion --db [nombreBBDD ó ruta hasta la coleccion.bson] --> hacemos una restauración de la colección
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment