MongoDB en Windows

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