Instalación, configuración, tips de MongoDB en Windows, probado en MongoDB version: 2.6.5
# -------------------------------------------------------------------
# - Configuración de MongoDB en Windows
# -------------------------------------------------------------------
# Descomprimir MongoDB en:
C:\mongodb
# Cambiarle la ruta de Data
# Si la instalación utiliza un directorio de datos diferente, especifique el directorio al conectar, como en este ejemplo:
C:\mongodb\bin\mongod.exe --dbpath C:/mongodb/data
C:\mongodb\bin\mongod.exe --dbpath d:/test/mongodb/data
# Iniciar - conexion MongoDB
C:\Program Files\MongoDB\bin\mongod.exe
# Conectar - correr MongoDB para hacer consultas, mantenimeinto, etc.
C:\mongodb\bin\mongo.exe
# -------------------------------------------------------------------
# - Mantenimiento de collections = tablas de MongoDB
# -------------------------------------------------------------------
# -------------------------------------------------------------------
# Muestra ayudas
help
# Ayuda sobre db.
db.help()
# Ayuda sobre base de datos
db.nombreBaseDatos.help()
# Ayuda sobre base de collection
db.nombreDeColeccion.help()
# -------------------------------------------------------------------
# Mostrar la base de datos actual que nos encontramos
db
# -------------------------------------------------------------------
# Al hacer "use pruebadb" usa la base de datos "pruebadb" si no hay lo crea
use pruebadb
# -------------------------------------------------------------------
# Borrar base der datos. Al ejecutar el comando, se borrará la DB que estamos usando actualmente.
db.dropDatabase()
# Borrar collection
db.alumno.drop()
# -------------------------------------------------------------------
# Insercion de datos a la collections = tabla articulo, categoria
db.usuario.insert({nombre: "Wilzon", apellido: "Mariño Bueno", edad:555, web: "WilzonMB.com", correo:"wimarbueno@gmail.com"})
db.usuario.insert({nombre: "Pedro", apellido: "Picapiedra", edad:35, web: "pedro.com", correo:"pedro@gmail.com"})
db.usuario.insert({nombre: "Maria", apellido: "López Albujar", edad:30, web: "maria.com", correo:"maria@gmail.com"})
db.alumnos.insert(
{
"Nombre":"Elena2",
"Apellido":"Nito del Bosque",
"Edad":25,
"Pais":"Sp",
"Cursos": {
"iOS":true,
"Android":true
},
"Notas": {
"iOS":6.8,
"Android":5.6
},
"Fechas": [ {
"2012":[],
"2013":[11,12],
"2014":[1,2,6]
}
]
}
)
db.alumnos.insert({"Nombre":"Elena","Apellido":"Nito del Bosque","Edad":25,"Pais":"Sp","Cursos":{"iOS":true,"Android":true},"Notas":{"iOS":6.8,"Android":5.6},"Fechas":[{"2012":[],"2013":[11,12],"2014":[1,2,6]}]})
db.alumnos.insert({"Nombre":"Armando","Apellido":"Guerra Segura","Edad":38,"Pais":"Au","Cursos":{"MongoDB":true},"Notas":{"MongoDB":7.5},"Fechas":[{"2014":[4]}]})
db.alumnos.insert({"Nombre":"Aitor","Apellido":"Menta","Edad":27,"Pais":"Mx","Cursos":{"Json":true,"Git":true},"Notas":{"Json":7.5,"Git":8.3},"Fechas":[{"2013":[8],"2014":[4]}]})
db.alumnos.insert({"Nombre":"Ana","Apellido":"Tomía","Edad":43,"Pais":"Co","Cursos":{"Json":true,"MongoDB":true},"Notas":{"Json":7.5,"MongoDB":7},"Fechas":[{"2013":[8],"2014":[4]}]})
db.alumnos.insert({"Nombre":"Unai","Apellido":"Nomás","Edad":33,"Pais":"Sp","Cursos":{"iOS":true,"Android":true,"Juegos":true},"Notas":{"iOS":9,"Android":7.5,"Juegos":8},"Fechas":[{"2012":[7,8],"2013":[11,12],"2014":[1,2]}]})
db.alumnos.insert({"Nombre":"Leandro","Apellido":"Grado","Edad":46,"Pais":"Mx","Cursos":{"Android":true,"MongoDB":true},"Notas":{"Android":6,"MongoDB":false},"Fechas":[{"2013":[3,4],"2014":[4]}]})
db.alumnos.insert({"Nombre":"Encarna","Apellido":"Vales","Edad":31,"Pais":"Mx","Cursos":{"iOS":true,"MongoDB":true},"Notas":{"iOS":8,"MongoDB":7},"Fechas":[{"2013":[1,2],"2014":[4]}]})
db.curso.insert(
{
idAlumno: "A1",
FechaCurso: newDate("Jan 25, 2014"),
Curso: "Json",
Precio: 450
})
db.curso.insert({idAlumno:"B3",FechaCurso: new Date("Feb 12, 2014"),Curso: "iOS",Precio: 600})
db.curso.insert({idAlumno:"C1",FechaCurso: new Date("Feb 22, 2014"),Curso: "MongoDB",Precio: 500})
db.curso.insert({idAlumno:"A1",FechaCurso: new Date("May 20, 2014"),Curso: "Android",Precio: 650})
db.curso.insert({idAlumno:"B3",FechaCurso: new Date("Aug 10, 2014"),Curso: "Android",Precio: 650})
db.curso.insert({idAlumno:"A1",FechaCurso: new Date("Sep 10, 2014"),Curso: "iOS",Precio: 600})
db.articulo.insert({titulo: "Primera prueba", contenido: "Mi primera prueba de insercion de un documento"})
db.articulo.insert({titulo: "Segunda prueba", contenido: "Mi segunda prueba de insercion de un documento"})
db.categoria.insert({titulo: "Primera categoria", contenido: "Mi primera categoria"})
db.categoria.insert({titulo: "Segunda categoria", contenido: "Mi segunda categoria"})
# -------------------------------------------------------------------
# Update, modificaion de datos: ejem. cambiamos el correo de maria a hotmail.com,
# Con esta operacion borra todos los campos y queda solo el correo con los datos modificados
db.usuario.update({correo:"maria@gmail.com"}, {correo:"maria@hotmail.com"})
# Update, actualizamos solo el campo de email
db.usuario.update({correo:"maria@gmail.com"}, {$set: {correo:"maria@hotmail.com"}})
# Incrementar la edad + 1 (ejem: 29+1=30).
db.usuario.update({correo:"wimarbueno@gmail.com"}, {$inc: {edad:1}})
# Disminuir edad en -1
db.usuario.update({correo:"wimarbueno@gmail.com"}, {$inc: {edad:-1}})
---
# Incrementar la edad de todos los usuarios (Por ejemplo si es que hay 5000 usuario no se puede hacer 1 po 1)
# Con esto se incrementa solo el primero de la fila
db.usuario.update({}, {$inc: {edad:1}})
# Incrementamos la edad a todos con esto:
# La primera. False: por que me va querer coger el primero y no le dejo
# La segunda. True: Es decir si no quieres que coja el primero lo cojo el resto
db.usuario.update({}, {$inc: {edad:1}}, false, true)
# Update multiples campos, en la version de MongoDB 2.6.5. (se necesita 3 argumentos para actualziar)
db.usuario.update({}, {$inc: {edad:1}}, {multi:true})
db.usuario.update({
}, {
$inc: {edad:1}
}, {
multi:true
})
# Update, Save: Actualizar con save, si no hay registro con la condicional lo crea nuevo
db.usuario.save({"_id" : ObjectId("5478841a7a8a9d4d372c40ee"), correo:"maria@hotmail.com", edad:98})
# Agregar campos. Update campos de la collection. (Agregar campos a la Collection al registro de una de una de las filas)
db.usuario.update({nombre:"Wilzon"}, {$set:{usuario:"wilzonmb", hobby:"Investigar"} })
#- Aqui puse un campo (edad) que existia y con nuevo valor y hace el cambio sin problemas
db.usuario.update({nombre:"Wilzon"}, {$set:{usuario:"wilzonmb", hobby:"Investigar", edad:29} })
# -------------------------------------------------------------------
# Lista = select a la collection
db.categoria.find()
db.categoria.find().pretty() # Lista con formato, que ayuda a leer mejor
db.categoria.findOne() # Lista un solo elemento
# Ordenar la DB, Listamos por nombre, etc.
# Con el NULL le decimos que ignore el Find (busqueda global) sino que nos liste por nombre
# Le decimos que sea incremental con el 1 y nos muestra con el ID que genra automaticamente MongoDB
db.usuario.find(null, {nombre:1})
# Para oculta el ID que genra automaticamente MongoDB, le ponemos el id en 0
db.usuario.find(null, {nombre:1, _id:0})
# Listamos nombre, y edad, ordenandolo por edad de forma ascedente
db.usuario.find(null, {nombre:1, _id:0, edad:1}).sort({edad:1})
# Listamos nombre, y edad, ordenandolo por edad de forma descendente
db.usuario.find(null, {nombre:1, _id:0, edad:1}).sort({edad:-1})
# Listando con limit cantidad de usuarios que deseas y ordenado por edad
db.usuario.find().sort({edad:1}).limit(3)
# Listando con limit cantidad de usuarios que deseas y ordenado por edad, saltando los primeros 2 usuarios
db.usuario.find().sort({edad:1}).limit(3).skip(2)
# Contamos usuarios que tengan mayor que "numero dado"
db.usuario.count({edad: {$gte:20}})
db.usuario.find( {edad: {$gt: 5} }, {nombre: 1, address: 1 } ).limit(5)
# Contamos usuarios que tengan menor que "numero dado"
db.usuario.count({edad: {$lte:20}})
# Listamos usuarios que el campo usuario exista
db.usuario.find( {usuario: {$exists: true} })
# ---
# Notacion de punto
# Hay campos dentro de otro campo: "Notas":{"iOS":6.8,"Android":5.6}
# Con esto buscamos dentro de notas mostrar curso Android con la nota 5.6
db.alumnos.find({"Notas.Android":5.6})
# -------------------------------------------------------------------
# Join en MongoDB
# Primero insertamos los profesores
db.profesores.insert({nombre:"Albert", apellido: "Moral", materia: "MongoDB"})
db.profesores.insert({nombre:"Elsa", apellido: "Polindo", materia: "Json"})
# Agregamos un campo "prtofesor" en todos los alumnos, y le asignamos el ID del profesor que dicta el curso de "MongoDB"
db.alumnos.update({"Cursos.MongoDB": true}, {$set: {"profesor": ObjectId("5478a1e87a8a9d4d372c40fa")}}, false, true)
# Aqui listamos alumnos que pertenemos al curso de "MongoDB" con el profesor de "MongoDB"
db.alumnos.find({"profesor": ObjectId("5478a1e87a8a9d4d372c40fa")})
# -------------------------------------------------------------------
# Drop: Eliminar el elemento, que tenga el titulo "Segunda categoria"
db.categoria.remove({titulo : "Segunda categoria"})
# Drop, Remove: Elimina todos los elementos
db.usuario.remove({})
# -------------------------------------------------------------------
# Muestra todos las bases de datos
show dbs
# -------------------------------------------------------------------
# Muestra todas las collections = tablas de la base de datos
show collections
# -------------------------------------------------------------------
# Nos muestra todas las collecyions ordenas e indexadas, nos devuelve el indice y collection, etc
db.system.indexes.find()
# -------------------------------------------------------------------
# MarReduce
# mapReduce (son 2 funciones = Map y Reduce -> se forma framework) es un framework que fue creado por Google que está diseñado para realizar operaciones sobre grnades colecciones de datos, conocidos como BigData
# Map: Se encarga de mapear los datos de origen, para cada dato de origgen se genra una dupla, está compuesta por clave y valor, y las cuales estan unidas en una lista que se pasa a lña siguiente función, a la funcion "Reduce"
# Reduce: Una ves que obtenemos el resultado de Map, esta funcion trata cada elemento de esa lista, clave y valor y realiza las operaciones necesarias sobre ella y asi nos devuelve dato concreto que nos npueda interesar
var mapFuncion = function(){
emit(this.idAlumno, this.Precio);
};
var reduceFuncion = function(keyidAlumno, valuesPrecio){
return Array.sum(valuesPrecio);
};
# Listando en Modo out "resultadoMapReduce"
db.curso.mapReduce(
mapFuncion,
reduceFuncion,
{out: "resultadoMapReduce"}
)
# Listando en Modo inline
db.curso.mapReduce(
mapFuncion,
reduceFuncion,
{out: {inline:1}}
)
# Al ejecutar consulta anterior me ha creado la collection "resultadoMapReduce"
# Listando "resultadoMapReduce"
db.resultadoMapReduce.find()
# -------------------------------------------------------------------
# - Documentación, comandos, tips, etc.
# -------------------------------------------------------------------
# -------------------------------------------------------------------
### Operadores de consulta y proyección
# Link: http://docs.mongodb.org/manual/reference/operator/query/#query-selectors
# ------
## Selectores de consulta
# Comparación
$gt # Coincide con los valores que son mayores que el valor especificado en la consulta.
$gte # Coincide con los valores que son mayores que o igual al valor especificado en la consulta.
$in # Coincide con cualquiera de los valores que existen en una matriz especificada en la consulta.
$lt # Coincide con valores menores que el valor especificado en la consulta.
$lte # Coincide con valores que son de menos de o igual que el valor especificado en la consulta.
$ne # Coincide con todos los valores que no son iguales al valor especificado en la consulta.
$nin # Coincide con valores que no existen en una matriz especificada a la consulta.
# ------
# Logica
$and # Se une a cláusulas de consulta con una lógica y devuelve todos los documentos que coinciden con las condiciones de ambas cláusulas.
$nor # Se une a cláusulas de consulta con una lógica NOR devuelve todos los documentos que carezcan de igualar ambas cláusulas.
$not # Invierte el efecto de una expresión de consulta y devuelve los documentos que no coinciden con la expresión de consulta.
$or # Se une a cláusulas de consulta con un OR lógico devuelve todos los documentos que coinciden con las condiciones de cualquiera cláusula.
# ------
# Elemento
$exists # Coincide con documentos que tienen el campo especificado.
$type # Selecciona documentos si un campo es del tipo especificado.
# ------
# Evaluacion
#Array
$all # Coincide con matrices que contienen todos los elementos especificados en la consulta.
$elemMatch # Selecciona documentos si el elemento en el campo de matriz todos los partidos de la condición $ elemMatch especificado.
$size # Selecciona documentos si el campo de matriz es un tamaño especificado.
# ------
# Commentarios
$comment # Añade un comentario a un predicado de consulta.
# ------
# Operadores de Proyección
$ # Proyecta el primer elemento de una matriz que coincide con la condición de consulta.
$elemMatch # Proyecta el primer elemento de una matriz que coincide con la condición $ elemMatch especificado.
$meta # Proyectos puntuación del documento asignado durante la operación de texto $.
$slice # Limita el número de elementos proyectados a partir de una matriz. Soporta saltar y limitar rodajas.
# -------------------------------------------------------------------
# - Importacion y Exportacion MongoDB Data
# -------------------------------------------------------------------
mongoexport
mongorestore
mongoimport
mongodump
# -------------------------------------------------------------------
# mongoexport: Exportar en JSON Format
mongoexport --db nombre_DB --collection nombre_collection --out /c/tmp/contacts.json --journal
mongoexport --db mean --collection usuario --out /c/tmp/contacts.json --journal
# mongoexport: Exportar desde Remote Host Running with Authentication
mongoexport --host mongodb1.wilzonmb.com --port 37017 --username nombre_user --password clave_pass --collection nombre_collection --db nombre_DB --out mdb1-wilzonmb.json
# -------------------------------------------------------------------
-- mongodump: Exportar la DB
mongodump -d <nombre_db> -o <ruta_carpeta>
# -------------------------------------------------------------------
# mongorestore: Restaurar DB
# Importa todo lo que esta ene sta carpeta
mongorestore --dbpath /c/tmp/nombre_db
# Importa la coleccion
mongorestore --db nombre_db --collection nombre_collection /c/tmp/mean/nombre_collection.bson
# Importamos la collection ylo cambiamos de nombre
mongorestore --db nombre_db --collection nuevo_nombre_collection /c/tmp/mean/nombre_collection.bson