Este documento proporciona una introducción a NoSQL y MongoDB. Explica las características clave de NoSQL como esquema flexible, capacidad de manejar grandes volúmenes de datos y rendimiento. Luego describe los tres tipos principales de bases de datos NoSQL - orientadas a llave-valor, columnas y documentos - y proporciona ejemplos de cada uno. Finalmente, se centra en MongoDB explicando cómo instalarlo, guardar y consultar datos, y usar funciones como map-reduce.
Este documento describe MongoDB y MongoMapper. Habla sobre las características de NoSQL como esquema libre, distribución y escalabilidad. Explica los tipos principales de NoSQL como llave/valor, orientadas a columnas y orientadas a documentos. Luego profundiza en MongoDB describiendo cómo se almacenan y manipulan los datos, y cómo conectarse y realizar operaciones básicas como insertar, actualizar y eliminar documentos.
Este documento provee una guía para aprovechar las principales características del intérprete de comandos Bash en sistemas Unix, incluyendo redirecciones, expansión de parámetros, control de trabajos, variables de entorno, y funciones. Bash puede usarse como lenguaje de programación para automatizar tareas y facilitar la administración del sistema.
La actividad Terminal (parte II) es un software que viene incluído en la XO por defecto. No obstante, una vez que se inicia, no dispone de ayuda ni se puede entender su funcionamiento, salvo que se se sepa su uso específico.
Charla introductoria al lenguaje Python dictada por Julián Cardonnet, en el marco de los festejos del Software Freedom Day 2009 en la ciudad de Tandil, Argentina
El documento introduce Groovy, un lenguaje dinámico para la JVM que mejora Java eliminando código boilerplate y agregando características como tipado dinámico, closures, DSL y metaprogramación. Explica las ventajas de Groovy sobre Java y proporciona ejemplos que muestran cómo Groovy simplifica tareas comunes como iteración, cadenas y colecciones.
Este documento describe MongoDB y MongoMapper. Habla sobre las características de NoSQL como esquema libre, distribución y escalabilidad. Explica los tipos principales de NoSQL como llave/valor, orientadas a columnas y orientadas a documentos. Luego profundiza en MongoDB describiendo cómo se almacenan y manipulan los datos, y cómo conectarse y realizar operaciones básicas como insertar, actualizar y eliminar documentos.
Este documento provee una guía para aprovechar las principales características del intérprete de comandos Bash en sistemas Unix, incluyendo redirecciones, expansión de parámetros, control de trabajos, variables de entorno, y funciones. Bash puede usarse como lenguaje de programación para automatizar tareas y facilitar la administración del sistema.
La actividad Terminal (parte II) es un software que viene incluído en la XO por defecto. No obstante, una vez que se inicia, no dispone de ayuda ni se puede entender su funcionamiento, salvo que se se sepa su uso específico.
Charla introductoria al lenguaje Python dictada por Julián Cardonnet, en el marco de los festejos del Software Freedom Day 2009 en la ciudad de Tandil, Argentina
El documento introduce Groovy, un lenguaje dinámico para la JVM que mejora Java eliminando código boilerplate y agregando características como tipado dinámico, closures, DSL y metaprogramación. Explica las ventajas de Groovy sobre Java y proporciona ejemplos que muestran cómo Groovy simplifica tareas comunes como iteración, cadenas y colecciones.
Este documento describe MongoDB y MongoMapper. Habla sobre las características de NoSQL como esquema libre, distribución y escalabilidad. Explica los tipos principales de NoSQL como llave/valor, orientadas a columnas y orientadas a documentos. Luego profundiza en MongoDB describiendo cómo se almacenan y manipulan los datos, y cómo conectarse y realizar operaciones básicas como insertar, actualizar y eliminar documentos.
Este documento proporciona una introducción a Cloud Computing y MapReduce. Explica que Cloud Computing permite alquilar recursos computacionales y de almacenamiento de grandes compañías a través de Internet. Describe las ventajas de Cloud Computing como escalabilidad, bajo coste y facilidad de uso. También introduce MapReduce como un modelo para procesar grandes cantidades de datos de forma distribuida en múltiples nodos.
Este documento presenta una introducción a MongoDB. Explica brevemente qué es NOSQL y MongoDB, y proporciona detalles sobre cómo instalar y ejecutar MongoDB, así como sobre los conceptos básicos como colecciones, documentos y consultas. También cubre temas como modelado de datos, índices, agregación y el uso de MongoDB con diferentes lenguajes de programación.
José Ramón Palanco - NoSQL Security [RootedCON 2011]RootedCON
Este documento presenta una introducción a NoSQL y sus implementaciones más populares como MongoDB, CouchDB y Cassandra. Explica los conceptos clave de NoSQL como el teorema CAP y las diferentes arquitecturas como almacén de documentos, grafos y clave-valor. Luego, describe varios vectores de ataque específicos de NoSQL como injection en JSON y vistas, explotación de listeners HTTP, bruteforce de keys y ataques de denegación de servicio. El documento provee detalles técnicos sobre cómo aprovechar estas vulnerabilidades en cada implementación.
Este documento describe la instalación y administración de MongoDB. Explica cómo instalar MongoDB en diferentes sistemas operativos como Windows y Linux, los parámetros de configuración, comandos básicos del shell, creación y administración de usuarios, roles y conceptos clave como replica sets y sharding.
Este documento presenta una introducción al lenguaje de programación Python, cubriendo temas como ejecutar Python en la consola, imprimir mensajes, realizar operaciones matemáticas, declarar variables, usar bloques con condicionales y bucles, definir funciones y clases, y utilizar diferentes tipos de datos como cadenas, tuplas, listas y diccionarios. También introduce los módulos os y os.path para realizar operaciones del sistema operativo, y menciona brevemente la programación gráfica y de red con Python.
El documento presenta una agenda para un análisis de datos con MongoDB. La agenda incluye por qué hacer análisis con MongoDB, cómo crear un ambiente de MongoDB, cómo ingestar datos en MongoDB, cómo explorar datos con MongoDB Compass, cómo hacer análisis de datos con el Aggregation Framework de MongoDB, cómo extender el análisis con Python y Apache Spark, e integrar herramientas de BI. El documento también incluye una demostración del Aggregation Framework y la integración con Python y herramientas de BI.
Mallorca MUG: MapReduce y Aggregation FrameworkEmilio Torrens
Este documento presenta MapReduce y el Aggregation Framework de MongoDB. Explica cómo funcionan MapReduce y el Aggregation Framework, incluyendo ejemplos de código. También describe cómo se pueden usar MapReduce y el Aggregation Framework para analizar registros web a gran escala, reduciendo los datos cada hora y almacenándolos en colecciones particionadas por mes para consultas posteriores.
Este documento proporciona una introducción a MongoDB, incluyendo que es una base de datos NoSQL orientada a documentos, que MongoDB Atlas ofrece alojamiento en la nube de clusters de MongoDB de forma automatizada y escalable, y describe conceptos básicos como colecciones, documentos y operaciones CRUD.
El documento habla sobre cómo escribir y publicar plugins de Gradle. Explica conceptos clave como proyectos, tareas y plugins. También cubre los pasos para construir y publicar plugins de Gradle, incluyendo una demostración. Finalmente, presenta algunos plugins de Gradle creados por PuraVida como ejemplos educativos y funcionales.
Este documento presenta una introducción a Node.js, un framework de JavaScript para el desarrollo de aplicaciones web en tiempo real. Explica conceptos clave como el modelo de programación basado en eventos asíncronos, el uso de módulos y librerías como Express para crear servidores web y aplicaciones, y el acceso a bases de datos como MySQL a través de módulos. También menciona algunas herramientas y técnicas avanzadas como el uso de clusters para aprovechar múltiples procesadores.
Greach 2011 - Engrandeciendo Grails con Mongo DBgreach_es
Este documento presenta una introducción a MongoDB y su integración con Grails a través del plugin MongoDB GORM. La presentación comienza explicando brevemente quién es el autor y por qué está hablando sobre este tema. Luego, introduce conceptos clave sobre NoSQL y MongoDB, incluyendo el diseño de modelos mediante incrustación vs enlaces y el uso de map-reduce. Finalmente, explica las funcionalidades principales del plugin MongoDB GORM como mapeo de clases, consultas y transaccionalidad, e incluye demostraciones de uso.
Historia de los buffer overflows por Juan SaccoJuan Sacco
Este documento resume la historia de los buffer overflows desde sus comienzos en la década de 1990 hasta las defensas actuales como ASLR y canarios de pila. A pesar de décadas de intentos por mitigarlos, los buffer overflows siguen siendo una amenaza debido a factores culturales como la priorización de la velocidad sobre la seguridad en el desarrollo de software. El documento concluye sugiriendo que una mayor capacitación y cambios en los procesos de desarrollo podrían ayudar a prevenir este tipo de vulnerabilidades
Este documento presenta una guía de iniciación a Gnu/Linux dirigida a usuarios con conocimientos básicos de informática. Explica comandos básicos como cat, grep y sort para visualizar y filtrar archivos, y comandos de uso general como ls, cd y rm para navegar el sistema y manipular archivos y directorios. También cubre el acceso remoto mediante SSH y cómo ver y eliminar procesos de otros usuarios mediante el comando ps aux.
El documento describe la arquitectura de conjunto de instrucciones (ISA) de MIPS. Explica que la ISA define las operaciones, tipos de datos, formato de instrucciones y acceso a operandos. Describe las diferentes instrucciones de MIPS como aritméticas, lógicas, carga/almacenamiento y saltos. La ISA de MIPS es de tipo load/store donde solo las instrucciones de carga y almacenamiento acceden directamente a la memoria.
Este documento presenta Cloud Computing y MapReduce. Introduce Cloud Computing, sus ventajas como escalabilidad y acceso a potentes centros de datos. Explica los tipos de Cloud Computing como SaaS, PaaS e IaaS. Luego describe MapReduce, su origen en la programación funcional y cómo permite procesar grandes cantidades de datos de forma distribuida mediante las funciones map y reduce. Finalmente, presenta ejemplos como contar palabras o obtener canciones populares usando MapReduce.
Este documento presenta 20 consejos y trucos para mejorar el rendimiento y la seguridad de MySQL. Algunos de los consejos incluyen la configuración de cuotas de usuario, el uso de UTF-8, la importación y exportación de CSV, la elección adecuada del motor de almacenamiento y la investigación de los diferentes tipos de datos disponibles. El documento también cubre temas avanzados como subconsultas, procedimientos almacenados, gestores y disparadores.
El documento describe cómo crear y administrar una base de datos y tablas en MySQL usando lenguaje SQL. Inicialmente se crea una base de datos llamada "estudianteBD", luego se crea una tabla dentro de ella y se agregan campos. También se describen cómo insertar, actualizar y eliminar datos, así como eliminar la base de datos. Finalmente, se explica phpMyAdmin como una herramienta para administrar bases de datos MySQL a través de una interfaz web.
La Unidad Eudista de Espiritualidad se complace en poner a su disposición el siguiente Triduo Eudista, que tiene como propósito ofrecer tres breves meditaciones sobre Jesucristo Sumo y Eterno Sacerdote, el Sagrado Corazón de Jesús y el Inmaculado Corazón de María. En cada día encuentran una oración inicial, una meditación y una oración final.
Este documento describe MongoDB y MongoMapper. Habla sobre las características de NoSQL como esquema libre, distribución y escalabilidad. Explica los tipos principales de NoSQL como llave/valor, orientadas a columnas y orientadas a documentos. Luego profundiza en MongoDB describiendo cómo se almacenan y manipulan los datos, y cómo conectarse y realizar operaciones básicas como insertar, actualizar y eliminar documentos.
Este documento proporciona una introducción a Cloud Computing y MapReduce. Explica que Cloud Computing permite alquilar recursos computacionales y de almacenamiento de grandes compañías a través de Internet. Describe las ventajas de Cloud Computing como escalabilidad, bajo coste y facilidad de uso. También introduce MapReduce como un modelo para procesar grandes cantidades de datos de forma distribuida en múltiples nodos.
Este documento presenta una introducción a MongoDB. Explica brevemente qué es NOSQL y MongoDB, y proporciona detalles sobre cómo instalar y ejecutar MongoDB, así como sobre los conceptos básicos como colecciones, documentos y consultas. También cubre temas como modelado de datos, índices, agregación y el uso de MongoDB con diferentes lenguajes de programación.
José Ramón Palanco - NoSQL Security [RootedCON 2011]RootedCON
Este documento presenta una introducción a NoSQL y sus implementaciones más populares como MongoDB, CouchDB y Cassandra. Explica los conceptos clave de NoSQL como el teorema CAP y las diferentes arquitecturas como almacén de documentos, grafos y clave-valor. Luego, describe varios vectores de ataque específicos de NoSQL como injection en JSON y vistas, explotación de listeners HTTP, bruteforce de keys y ataques de denegación de servicio. El documento provee detalles técnicos sobre cómo aprovechar estas vulnerabilidades en cada implementación.
Este documento describe la instalación y administración de MongoDB. Explica cómo instalar MongoDB en diferentes sistemas operativos como Windows y Linux, los parámetros de configuración, comandos básicos del shell, creación y administración de usuarios, roles y conceptos clave como replica sets y sharding.
Este documento presenta una introducción al lenguaje de programación Python, cubriendo temas como ejecutar Python en la consola, imprimir mensajes, realizar operaciones matemáticas, declarar variables, usar bloques con condicionales y bucles, definir funciones y clases, y utilizar diferentes tipos de datos como cadenas, tuplas, listas y diccionarios. También introduce los módulos os y os.path para realizar operaciones del sistema operativo, y menciona brevemente la programación gráfica y de red con Python.
El documento presenta una agenda para un análisis de datos con MongoDB. La agenda incluye por qué hacer análisis con MongoDB, cómo crear un ambiente de MongoDB, cómo ingestar datos en MongoDB, cómo explorar datos con MongoDB Compass, cómo hacer análisis de datos con el Aggregation Framework de MongoDB, cómo extender el análisis con Python y Apache Spark, e integrar herramientas de BI. El documento también incluye una demostración del Aggregation Framework y la integración con Python y herramientas de BI.
Mallorca MUG: MapReduce y Aggregation FrameworkEmilio Torrens
Este documento presenta MapReduce y el Aggregation Framework de MongoDB. Explica cómo funcionan MapReduce y el Aggregation Framework, incluyendo ejemplos de código. También describe cómo se pueden usar MapReduce y el Aggregation Framework para analizar registros web a gran escala, reduciendo los datos cada hora y almacenándolos en colecciones particionadas por mes para consultas posteriores.
Este documento proporciona una introducción a MongoDB, incluyendo que es una base de datos NoSQL orientada a documentos, que MongoDB Atlas ofrece alojamiento en la nube de clusters de MongoDB de forma automatizada y escalable, y describe conceptos básicos como colecciones, documentos y operaciones CRUD.
El documento habla sobre cómo escribir y publicar plugins de Gradle. Explica conceptos clave como proyectos, tareas y plugins. También cubre los pasos para construir y publicar plugins de Gradle, incluyendo una demostración. Finalmente, presenta algunos plugins de Gradle creados por PuraVida como ejemplos educativos y funcionales.
Este documento presenta una introducción a Node.js, un framework de JavaScript para el desarrollo de aplicaciones web en tiempo real. Explica conceptos clave como el modelo de programación basado en eventos asíncronos, el uso de módulos y librerías como Express para crear servidores web y aplicaciones, y el acceso a bases de datos como MySQL a través de módulos. También menciona algunas herramientas y técnicas avanzadas como el uso de clusters para aprovechar múltiples procesadores.
Greach 2011 - Engrandeciendo Grails con Mongo DBgreach_es
Este documento presenta una introducción a MongoDB y su integración con Grails a través del plugin MongoDB GORM. La presentación comienza explicando brevemente quién es el autor y por qué está hablando sobre este tema. Luego, introduce conceptos clave sobre NoSQL y MongoDB, incluyendo el diseño de modelos mediante incrustación vs enlaces y el uso de map-reduce. Finalmente, explica las funcionalidades principales del plugin MongoDB GORM como mapeo de clases, consultas y transaccionalidad, e incluye demostraciones de uso.
Historia de los buffer overflows por Juan SaccoJuan Sacco
Este documento resume la historia de los buffer overflows desde sus comienzos en la década de 1990 hasta las defensas actuales como ASLR y canarios de pila. A pesar de décadas de intentos por mitigarlos, los buffer overflows siguen siendo una amenaza debido a factores culturales como la priorización de la velocidad sobre la seguridad en el desarrollo de software. El documento concluye sugiriendo que una mayor capacitación y cambios en los procesos de desarrollo podrían ayudar a prevenir este tipo de vulnerabilidades
Este documento presenta una guía de iniciación a Gnu/Linux dirigida a usuarios con conocimientos básicos de informática. Explica comandos básicos como cat, grep y sort para visualizar y filtrar archivos, y comandos de uso general como ls, cd y rm para navegar el sistema y manipular archivos y directorios. También cubre el acceso remoto mediante SSH y cómo ver y eliminar procesos de otros usuarios mediante el comando ps aux.
El documento describe la arquitectura de conjunto de instrucciones (ISA) de MIPS. Explica que la ISA define las operaciones, tipos de datos, formato de instrucciones y acceso a operandos. Describe las diferentes instrucciones de MIPS como aritméticas, lógicas, carga/almacenamiento y saltos. La ISA de MIPS es de tipo load/store donde solo las instrucciones de carga y almacenamiento acceden directamente a la memoria.
Este documento presenta Cloud Computing y MapReduce. Introduce Cloud Computing, sus ventajas como escalabilidad y acceso a potentes centros de datos. Explica los tipos de Cloud Computing como SaaS, PaaS e IaaS. Luego describe MapReduce, su origen en la programación funcional y cómo permite procesar grandes cantidades de datos de forma distribuida mediante las funciones map y reduce. Finalmente, presenta ejemplos como contar palabras o obtener canciones populares usando MapReduce.
Este documento presenta 20 consejos y trucos para mejorar el rendimiento y la seguridad de MySQL. Algunos de los consejos incluyen la configuración de cuotas de usuario, el uso de UTF-8, la importación y exportación de CSV, la elección adecuada del motor de almacenamiento y la investigación de los diferentes tipos de datos disponibles. El documento también cubre temas avanzados como subconsultas, procedimientos almacenados, gestores y disparadores.
El documento describe cómo crear y administrar una base de datos y tablas en MySQL usando lenguaje SQL. Inicialmente se crea una base de datos llamada "estudianteBD", luego se crea una tabla dentro de ella y se agregan campos. También se describen cómo insertar, actualizar y eliminar datos, así como eliminar la base de datos. Finalmente, se explica phpMyAdmin como una herramienta para administrar bases de datos MySQL a través de una interfaz web.
La Unidad Eudista de Espiritualidad se complace en poner a su disposición el siguiente Triduo Eudista, que tiene como propósito ofrecer tres breves meditaciones sobre Jesucristo Sumo y Eterno Sacerdote, el Sagrado Corazón de Jesús y el Inmaculado Corazón de María. En cada día encuentran una oración inicial, una meditación y una oración final.
8. Tipos de NoSQL
Key/Value (Llave/valor)
Column-oriented (orientadas a columnas)
Document-oriented (orientadas a
documentos)
9. Key/Value
¿Qué es?
una llave
un blob
Ventajas:
muy simple para implementar
muy rapido
Útil para:
el cache(memcache)
sistema de manejo de cola (redis)
limitado para aplicaciones complejas
10. Column-oriented
¿Qué es?
utiliza tablas dinamicas
mas flexible que tablas de RDBMS
multi-dimensional
Ventajas:
el sistema de consulta se acerca al de un RDBMS
diseño de google, soporta grandes cargas
versiones
Útil para:
grandes colecciones
mapping de los datos a objetos no es natural (igual que
rdbms)
11. Document-oriented
¿Qué es?
formato json o xml
muy flexible
Ventajas:
mapea facilmente a un objeto (python, ruby, c++ etc)
Útil para:
aplicaciones web complejas
todo tipo de aplicacion que utiliza documentos y
necesita flexibilidad
12. La soluciones que aporta el NoSQL
built-in replication, master a master
Map/Reduce
mas simple de instalar (se necesita tomar un curso
para instalar a oracle o sqlserver)
casi todas son software libre, muy accesible para
todos
hecho para programadores, mas orientadas a la
programaciones (map/reduce lo entienden mejor los
programadores que los administradores de base de
datos)
13. ¿Qué es el map/reduce?
Permite procesar los datos guardados en un cluster de
computadores de forma paralela.
Sus resultados son similares a los de una función de
agregación como GROUP BY en SQL.
14. ¿Que es el map?
El map es aplicar una función sobre cada elemento de un
arreglo y retornar un arreglo con sus elementos
modificados.
Ejemplo (en ruby):
> matriz = [1,2]
> matriz.map { |n| n+2 }
=> [3, 4]
15. ¿Qué es el reduce?
Reduce es aplicar una función sobre cada elemento de un
arreglo y retornar un solo elemento. Se hace iterando sobre
cada elemento del arreglo. Cada iteracion empieza con el
valor retornado por la iteracion anterior y hace algo con
esta. Por esta razón, un reduce se debe iniciar con una
valor de entrada.
ejemplo (en ruby), con valor de entrada igual a cero:
> [1, 2, 3].reduce(0) do |sum, value|
sum + value
end
=> 6
16. Las ventajas del map/reduce
Esta hecho para poderse ejecutar en paralelo
=> Fácil de dividir en varias tareas
Todos los datos se pueden agrupar.
Probado y comprobado por los grande(google, amazon,
facebook).
18. SQL-RDBMS Key/Value
Variedad de
consultas Rendimiento
19. Las principales funcionalidades
Document-oriented storage
Consultas
Modificadores atómicos
Map/Reduce
GridFS: Almacenamiento de archivos
Soporte para Full Index
Replicación & Alta Disponibilidad
Auto-Sharding
20. ¿Como instalar MongoDB?
1. Para instalar mongodb descargamos el binario
correspondiente para nuestro sistema operativo http://www.
mongodb.org/display/DOCS/Downloads
2. descomprimes el paquete y creas los directorios /data y
/data/db o C:data y C:data dependiendo de tu SO
3. para iniciar el servicio corres el binario /bin/mongod o
binmongod.exe que viene en el paquete que has
descargado en el paso 1
para un entorno de producción se debe usar un sistema
operativo de 64-bits.
21. ¿Como instalar mongodb?
Para los sistemas unix*(linux,freebsd, OSX) es recomendado
usar el sistema de paquetes de cada sistema operativo.
adicionalmente 10gen provee de paquetes oficiales para las
distribuciones Linux Debian, Ubuntu, CentOS y Fedora
http://www.mongodb.
org/display/DOCS/Ubuntu+and+Debian+packages
http://www.mongodb.
org/display/DOCS/CentOS+and+Fedora+Packages
22. ¿ Cómo se guardan los datos
en MongoDB?
Colección:
Documento:
la música que tiene
Álbum de un
el almacén
artista
23. ¿BSON?
{
nombre: "Yellow Submarine",
autor: "The Beatles",
canciones: ["Yellow Submarine", "Only A Northern Song",
"All Together Now", "Hey Bulldog",
"It's All Too Much", "All You Need Is Love",
"Pepperland", "Sea Of Time",
"Sea Of Holes", "Sea Of Monsters",
"March Of The Meanies", "Pepperland Laid Waste",
"Yellow Submarine In Pepperland" ],
genero: "Rock",
anho: 1969,
cantidad: 20
}
24. ¿Que tipos de datos se pueden
guardar en MongoDB?
ObjectID (identificador del documento)
Números(Reales y Enteros)
Arreglos
Objetos(Hash)
Binarios(Blobs)
Tiempos(UTC)
vacio(nil, null)
http://bsonspec.org/
25. ¿Cómo conectarse a mongoDB?
console: ./bin/mongo
Drivers Oficiales: Drivers Comunitarios:
C C# and .NET
C++ Clojure
Java Erlang
Javascript Go
Perl Groovy
PHP Haskell
Python node.js
Ruby Lua
LuaMongo
Scala
Scheme (PLT)
Smalltalk
http://www.mongodb.org/display/DOCS/Drivers
26. Referenciar o Empotrar
Album
{
_id: "aaa",
nombre: "Yellow Submarine",
autor: "The Beatles",
genero: "Rock",
anho: 1969,
cantidad: 20
}
Cancion
{ nombre: "Yellow Submarine", duracion: 159, album_id: "aaa" },
{ nombre: "Only A Northern Song", duracion: 204, album_id: "aaa" }
{ nombre: "All Together Now", duracion: 130, album_id: "aaa" }
{ nombre: "Hey Bulldog", duracion: 191, album_id: "aaa" }
{ nombre: "It's All Too Much", duracion: 384, album_id: "aaa"}
{ nombre: "All You Need Is Love", duracion: 231, album_id: "aaa"}
27. Referenciar o Empotrar
{
nombre: "Yellow Submarine",
autor: "The Beatles",
canciones: [ { nombre: "Yellow Submarine", duracion: 159 },
{ nombre: "Only A Northern Song", duracion: 204 },
{ nombre: "All Together Now", duracion: 130 },
{ nombre: "Hey Bulldog", duracion: 191 },
{ nombre: "It's All Too Much", duracion: 384 },
{ nombre: "All You Need Is Love", duracion: 231 },
...],
genero: "Rock",
anho: 1969,
cantidad: 20
}
28. ¿Cómo añadir y eliminar documentos a
una colección?
./mongo
> use tienda_de_musica
> album = {
nombre: "Let it be", autor: "The Beatles", canciones: [],
genero: "Rock", anho: 1970, cantidad: 10 }
> db.musica.save(album);
> db.musica.find();
{ "_id" : ObjectId("4c10a976eaa67158a0d74b4b"), "nombre":
"Let it be", "autor" : "The Beatles", "canciones" : [ ], "genero" :
"Rock", "anho" : 1970, "cantidad" : 10 }
>db.musica.remove({});
>db.musica.remove({autor: "The Beatles"})
30. Un poco más acerca de los
modifcadores
$set y $unset: sirven para asignarle y quitarle el valor a un
campo de un documento respectivamente.
$inc: incrementan el valor asignado a un campo, solo es valido
para valores enteros.
$push,$pushAll: añaden uno o varios valores a un arreglo de
datos contenido en un campo del documento.
$addToSet: añade un valor a un arreglo si el valor no esta
repetido.
$pop, $pull, $pullAll: son operadores para borrar los valores
contenidos en un arreglo.
http://www.mongodb.org/display/DOCS/Updating
31. ¿Cómo hacer consultas en MongoDB?
Operadores condicionales para describir criterios de búsqueda:
$gt(>) $lt(<), $gte(<=), $lte(>=), $ne(!=)
>db.things.find({j : {$lt: 3}});
$exists chequea que el documento tenga o no un campo
> db.things.find( { a : { $exists : true } } );
Operadores solo para arreglos:
>db.things.find(a : {$in: x}
$in a incluye al menos un valor del arreglo x.
$nin negación de $in
>db.things.find(a : {$all: x}
$all a incluye todos los valores de x
http://www.mongodb.org/display/DOCS/Advanced+Queries
32. ¿Cómo hacer consultas en MongoDB?
WHERE
sql> select * from musica where cantidad=1;
> db.musica.find({cantidad: 1});
sql> select nombre from musica where cantidad<2;
> db.musica.find({cantidad: {$lt: 2}}, {'nombre': 1});
sql>select * from musica where name like 'The%';
>db.musica.find( { name : /^The/ } );
ORDER BY
sql> select * from musica ORDER BY anho desc;
> db.musica.find({}).sort({anho: -1});
LIMIT y OFFSET
sql> select * from musica LIMIT 10 OFFSET 5;
>db.musica.find().skip(5).limit(10)
33. ¿Cómo hacer consultas en MongoDB?
COUNT
sql>SELECT COUNT(*) FROM musica WHERE autor = "The
Beatles";
>db.musica.count({autor: "The Beatles"})
DISTINCT
sql> select distinct autor from musica;
>db.musica.distinct("autor")
34. ¿Cómo hacer consultas en MongoDB?
GROUP BY
sql>select autor, count(*) from musica where genero="rock"
group by autor
db.musica.group({key: { autor: true },
cond: { genero: "Rock" },
reduce: function(obj, prev) {
prev.csum += obj.cantidad;
},
initial: { csum: 0 }});
35. ¿Como usar map/reduce
en MongoDB?
// MapReduce esta hecho para hacer operaciones de agregaciones.
// Tomamos documentos de la coleccion Comentario:
{ text: "jajaja! buena presentacion!", author: 'eliot', votes: 2 }
// Aqui tenemos un documento Comentario con un autor, el
texto y la cantidad de votos.
36. ¿Como usar map/reduce
en MongoDB?
// Queremos calcular la cantidad de votos para cada autor de
todos los comentarios que han hecho.
var map = function() { emit(this.author, {votes: this.votes}); };
// Esto devuelve una colleccion de pares de llave valor como:
[ {"eliot", {votes: 2}}, {"eliot", {votes: 5}}, {"dwight", {votes: 3}} ]
37. ¿Como usar map/reduce
en MongoDB?
// A la funcion reduce, se manda cada llave unica y una
matriz conteniendo todos los valores para esta llave, // por
ejemplo para la llave "eliot", reduce recibe:
reduce("eliot", [{votes: 2}, {votes: 5}]);
// Teniendo eso, es fácil para cada autor obtener la suma
de todos los votos que han obtenido en todos sus
comentarios:
var reduce = function(key, values) {
var sum = 0;
values.forEach(function(doc) { sum += doc.votes; });
return {votes: sum};
};
38. ¿Como usar map/reduce
en MongoDB?
// Se ejecuta así:
var op = db.comments.mapReduce(map, reduce);
// Para obtener los resultados:
db[op.result].find(); [{ "_id" : "eliot", "value" : { "votes" : 7 }
}, { "_id" : "kbanker", "value" : { "votes" : 3 } }]
39. ¿GridFS?
Almacenamiento de archivos de todo tamaño sin
comprometer su stack.
Viene con binarios y bibliotecas
API simple: list, put, get, delete
46. ¿Como empezar a usar
MongoMapper?
Instalar
>sudo gem install mongo_mapper
Incluir en el proyecto Rails
agregar la la dependencia en config/environment.rb
config.gem "mongo_mapper", :version => "0.8.2", :source =>
"http://gemcutter.org"
47. ¿Como empezar a usar
MongoMapper?
Configurar la conexión a la base de datos
config/database.yml
development:
database: nombre-del-proyecto-development
host: localhost
port: 27017
test:
database: nombre-del-proyecto-test
production:
database: nombre-del-proyecto-production
48. Incluir en el proyecto Rails
Configurar la conexión a la base de datos
config/initializers/mongodb.rb
MongoMapper.setup(YAML.load_file(Rails.root.join('config',
'database.yml')), Rails.env, { :logger => Rails.logger, :passenger =>
false })
49. ¿Cómo definir un modelo?
app/model/album.rb
class Album
include MongoMapper::Document
key :nombre, String
key :autor, String
key :genero, String
key :anho, Integer
key :cantidad, Integer
key :canciones, Array
end
50. ¿Comó definir un modelo empotrado?
app/model/cancion.rb
class Cancion
include MongoMapper::EmbeddedDocument
key :name, String
key :duracion, Integer
end
app/model/album.rb
class Album
include MongoMapper::Document
...
has_many :canciones, :class_name => "Cancion"
end
51. ¿Que tipo de llaves existen?
los tipos de llaves que estan definidos en MongoMapper son:
ObjectID
String
Integer
Boolean
Array
Hash
Time
Binary
Set
52. ¿Se pueden definir nuevo tipos de
llaves?
class Point
attr_reader :x, :y
def self.to_mongo(value)...end
def self.from_mongo(value)...end
def initialize(*args)...end
end
53. ¿Cómo se definen las relaciones uno a
muchos?
class Album
...
has_many :canciones
...
end
class Cancion
...
key :album_id, ObjectID
belongs_to :album
...
end
54. ¿Cómo se definen las relaciones uno a
uno?
class Cancion
...
has_one :video
...
end
class Video
...
key :cancion_id, ObjectID
belongs_to :cancion
...
end
55. ¿Cómo se definen las relaciones
muchos a muchos?
class Cancion
...
key :album_ids, Array
many :albums, :in => :album_ids
...
end
class Album
...
key :canciones_ids, Array
has_many :canciones, :in => :canciones_ids
...
end
56. ¿MongoMapper tiene
relaciones polimorfas?
class Comment
...
key :commentable_id, ObjectId
key :commentable_type, String
belongs_to :commentable, :polymorphic => true
end
class Album
...
has_many :comments, :as => :commentable, :class_name =>
"Comment"
end
57. ¿Cómo añadir validaciones a los
modelos?
class Album
include MongoMapper::Document
key :nombre, String, :unique => true
key :autor, String, :required => true
key :genero, String, :in => ["Rock", "Pop", "Tropical"]
key :anho, Integer
key :cantidad, Integer
validates_presence_of :nombre, :message => "no ah sido
asignado"
many :canciones
end
58. ¿Qué validaciones existen en
MongoMapper?
required => boolean # necesaria
unique => boolean # unica
format => regexp # con un formato
in => array # incluida
not_in => array # excluida
length => Integer/Range/Hash # tamaño
además puedes usar la api de validatable para agregar mas
validaciónes
validates_presence_of, validates_format_of, validates_true_for,
etc
http://validatable.rubyforge.org/