Last active
January 21, 2022 20:15
-
-
Save angelmmg90/68aeaea97edfd09c03a4e7dc48f9fede to your computer and use it in GitHub Desktop.
MONGODB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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