Introduccion mongodb

19
Introducción Jonathan Corona @soequelle

description

Introduccion al uso de la base de datos NoSQL MongoDB

Transcript of Introduccion mongodb

Page 1: Introduccion mongodb

Introducción

Jonathan Corona@soequelle

Page 2: Introduccion mongodb

• Orientado a documentos◦ Los documentos (objetos) se corresponden directamente con los distintos tipos de datos de

los lenguajes de programación◦ Los documentos embebidos y los arrays minimizan la necesidad de usar joins◦ Ausencia de joins y de transacciones (de varios objetos) para lograr un alto rendimiento y

una escalabilidad fácil• Alto rendimiento

◦ Sin joins ni transacciones las lecturas y las escrituras son más rápidas◦ Índices en documentos embebidos y arrays

• Alta disponibilidad◦ Servidores replicados con mecanismos automáticos de sustitución de un servidor maestro en

caso de fallo• Fácil escalabilidad

◦ Lecturas consistentes eventualmente y distribuidas sobre los servidores replicados◦ Sharding automátizado (auto-partición de los datos a lo largo de varios servidores)

■ Las lecturas y las escrituras se distribuyen sobre los distintos shards■ La ausencia de joins y de transacciones hace que las consultas distribuidas sean

más fáciles y sencillas• Lenguaje de consulta muy completo y rico

Page 5: Introduccion mongodb

Iniciando el daemon de la base de datos

bin/mongod --dbpath data

Iniciando el daemon de la base de datos

bin/mongo

Page 7: Introduccion mongodb
Page 9: Introduccion mongodb

Agregando documentos

> use blogswitched to db blog

Agregando documentos

> db.posts.insert({'author_id':'1','uri':'/posts/','title':'El leon hambriento','summary':'Un leon con mucha hambre','body':'Cronica de sobre un cuento infantil...'})

> db.posts.insert({'author_id':'1','uri':'/posts/','title':'El leon hambriento','summary':'Un leon con mucha hambre','body':'Cronica de sobre un cuento infantil...','comments':{'name':'Juan','email':'[email protected]','content':'Buen post'}})})

Page 10: Introduccion mongodb

Consultando documentos

> db.posts.find() { "_id" : ObjectId("4d2cca114f8e825e1172d59d"), "author_id" : "1", "uri" : "/posts/", "title" : "El leon hambriento", "summary" : "Un leon con mucha hambre", "body" : "Cronica de sobre un cuento infantil...", "comments" : { "name" : "Juan", "email" : "[email protected]", "content" : "Buen post" } }{ "_id" : ObjectId("4d2cca604f8e825e1172d59e"), "author_id" : "2", "uri" : "/posts/2", "title" : "El leon hambriento2", "summary" : "Un leon con mucha hambre2", "body" : "Cronica de sobre un cuento infantil...2", "comments" : { "name" : "Juan2", "email" : "[email protected]", "content" : "Buen post2" } }{ "_id" : ObjectId("4d2cca844f8e825e1172d59f"), "author_id" : "3", "uri" : "/posts/3", "title" : "El leon hambriento3", "summary" : "Un leon con mucha hambre3", "body" : "Cronica de sobre un cuento infantil...3", "comments" : { "name" : "Juan3", "email" : "[email protected]", "content" : "Buen post3" } }{ "_id" : ObjectId("4d2ccaa94f8e825e1172d5a0"), "author_id" : "4", "uri" : "/posts/4", "title" : "El leon hambriento4", "summary" : "Un leon con mucha hambre4", "body" : "Cronica de sobre un cuento infantil...4", "comments" : { "name" : "Juan4", "email" : "[email protected]", "content" : "Buen post4" } }{ "_id" : ObjectId("4d2ccade4f8e825e1172d5a1"), "author_id" : "5", "uri" : "/posts/5", "title" : "El leon hambriento5", "summary" : "Un leon con mucha hambre5", "body" : "Cronica de sobre un cuento infantil...5", "comments" : { "name" : "Juan5", "email" : "[email protected]", "content" : "Buen post5" } }>

Page 11: Introduccion mongodb

Consultando documentos

> db.posts.findOne(){! "_id" : ObjectId("4d2cca114f8e825e1172d59d"),! "author_id" : "1",! "uri" : "/posts/",! "title" : "El leon hambriento",! "summary" : "Un leon con mucha hambre",! "body" : "Cronica de sobre un cuento infantil...",! "comments" : {! ! "name" : "Juan",! ! "email" : "[email protected]",! ! "content" : "Buen post"! }}>

Page 12: Introduccion mongodb

Consultando documentos

> db.posts.find({'author_id':'1'}){ "_id" : ObjectId("4d2cca114f8e825e1172d59d"), "author_id" : "1", "uri" : "/posts/", "title" : "El leon hambriento", "summary" : "Un leon con mucha hambre", "body" : "Cronica de sobre un cuento infantil...", "comments" : { "name" : "Juan", "email" : "[email protected]", "content" : "Buen post" } }>

> db.posts.find({'comments.name':'Juan'}){ "_id" : ObjectId("4d2cca114f8e825e1172d59d"), "author_id" : "1", "uri" : "/posts/", "title" : "El leon hambriento", "summary" : "Un leon con mucha hambre", "body" : "Cronica de sobre un cuento infantil...", "comments" : { "name" : "Juan", "email" : "[email protected]", "content" : "Buen post" } }>

Número de documentos

> db.posts.find().count()5>

Page 13: Introduccion mongodb

Limitando consulta de documentos

> db.posts.find().limit(2){ "_id" : ObjectId("4d2cca114f8e825e1172d59d"), "author_id" : "1", "uri" : "/posts/", "title" : "El leon hambriento", "summary" : "Un leon con mucha hambre", "body" : "Cronica de sobre un cuento infantil...", "comments" : { "name" : "Juan", "email" : "[email protected]", "content" : "Buen post" } }{ "_id" : ObjectId("4d2cca604f8e825e1172d59e"), "author_id" : "2", "uri" : "/posts/2", "title" : "El leon hambriento2", "summary" : "Un leon con mucha hambre2", "body" : "Cronica de sobre un cuento infantil...2", "comments" : { "name" : "Juan2", "email" : "[email protected]", "content" : "Buen post2" } }>

Omitiendo documentos

> db.posts.find().skip(2){ "_id" : ObjectId("4d2cca844f8e825e1172d59f"), "author_id" : "3", "uri" : "/posts/3", "title" : "El leon hambriento3", "summary" : "Un leon con mucha hambre3", "body" : "Cronica de sobre un cuento infantil...3", "comments" : { "name" : "Juan3", "email" : "[email protected]", "content" : "Buen post3" } }{ "_id" : ObjectId("4d2ccaa94f8e825e1172d5a0"), "author_id" : "4", "uri" : "/posts/4", "title" : "El leon hambriento4", "summary" : "Un leon con mucha hambre4", "body" : "Cronica de sobre un cuento infantil...4", "comments" : { "name" : "Juan4", "email" : "[email protected]", "content" : "Buen post4" } }{ "_id" : ObjectId("4d2ccade4f8e825e1172d5a1"), "author_id" : "5", "uri" : "/posts/5", "title" : "El leon hambriento5", "summary" : "Un leon con mucha hambre5", "body" : "Cronica de sobre un cuento infantil...5", "comments" : { "name" : "Juan5", "email" : "[email protected]", "content" : "Buen post5" } }>

Page 14: Introduccion mongodb

Ordenando Documentos

> db.posts.find().sort({author_id:-1}){ "_id" : ObjectId("4d2ccade4f8e825e1172d5a1"), "author_id" : "5", "uri" : "/posts/5", "title" : "El leon hambriento5", "summary" : "Un leon con mucha hambre5", "body" : "Cronica de sobre un cuento infantil...5", "comments" : { "name" : "Juan5", "email" : "[email protected]", "content" : "Buen post5" } }{ "_id" : ObjectId("4d2ccaa94f8e825e1172d5a0"), "author_id" : "4", "uri" : "/posts/4", "title" : "El leon hambriento4", "summary" : "Un leon con mucha hambre4", "body" : "Cronica de sobre un cuento infantil...4", "comments" : { "name" : "Juan4", "email" : "[email protected]", "content" : "Buen post4" } }{ "_id" : ObjectId("4d2cca844f8e825e1172d59f"), "author_id" : "3", "uri" : "/posts/3", "title" : "El leon hambriento3", "summary" : "Un leon con mucha hambre3", "body" : "Cronica de sobre un cuento infantil...3", "comments" : { "name" : "Juan3", "email" : "[email protected]", "content" : "Buen post3" } }{ "_id" : ObjectId("4d2cca604f8e825e1172d59e"), "author_id" : "2", "uri" : "/posts/2", "title" : "El leon hambriento2", "summary" : "Un leon con mucha hambre2", "body" : "Cronica de sobre un cuento infantil...2", "comments" : { "name" : "Juan2", "email" : "[email protected]", "content" : "Buen post2" } }{ "_id" : ObjectId("4d2cca114f8e825e1172d59d"), "author_id" : "1", "uri" : "/posts/", "title" : "El leon hambriento", "summary" : "Un leon con mucha hambre", "body" : "Cronica de sobre un cuento infantil...", "comments" : { "name" : "Juan", "email" : "[email protected]", "content" : "Buen post" } }>

Page 15: Introduccion mongodb

Consultando documentos

> db.posts.find().skip(2).limit(2).sort({author_id:-1}){ "_id" : ObjectId("4d2cca844f8e825e1172d59f"), "author_id" : "3", "uri" : "/posts/3", "title" : "El leon hambriento3", "summary" : "Un leon con mucha hambre3", "body" : "Cronica de sobre un cuento infantil...3", "comments" : { "name" : "Juan3", "email" : "[email protected]", "content" : "Buen post3" } }{ "_id" : ObjectId("4d2cca604f8e825e1172d59e"), "author_id" : "2", "uri" : "/posts/2", "title" : "El leon hambriento2", "summary" : "Un leon con mucha hambre2", "body" : "Cronica de sobre un cuento infantil...2", "comments" : { "name" : "Juan2", "email" : "[email protected]", "content" : "Buen post2" } }>

Operadores

• $gt: Valores mayores que el que le pasamos.• $lt: Valores menores que el que le pasamos.• $gte: Valores mayores o iguales que el que le pasamos.• $lte: Valores menores o iguales que el que le pasamos.• $ne: Distinto• $in: Si el valor esta entre los que le pasamos como array.

Page 16: Introduccion mongodb

Actualización de documentos

> var dato=db.posts.findOne({'author_id':'3'})> dato{! "_id" : ObjectId("4d2cca844f8e825e1172d59f"),! "author_id" : "3",! "uri" : "/posts/3",! "title" : "El leon hambriento3",! "summary" : "Un leon con mucha hambre3",! "body" : "Cronica de sobre un cuento infantil...3",! "comments" : {! ! "name" : "Juan3",! ! "email" : "[email protected]",! ! "content" : "Buen post3"! }}> dato['create']=new Date(2011,01,11)> db.posts.save(dato)> db.posts.findOne({'author_id':'3'}){! "_id" : ObjectId("4d2cca844f8e825e1172d59f"),! "author_id" : "3",! "uri" : "/posts/3",! "title" : "El leon hambriento3",! "summary" : "Un leon con mucha hambre3",! "body" : "Cronica de sobre un cuento infantil...3",! "comments" : {! ! "name" : "Juan3",! ! "email" : "[email protected]",! ! "content" : "Buen post3"! },! "create" : "Fri Feb 11 2011 00:00:00 GMT-0600 (CST)"}

Page 17: Introduccion mongodb

Actualización de documentos

> db.posts.update({'author_id':'3'},{'$set':{'uri':'/post/30'}})

Eliminando documentos

> db.posts.remove({'author_id':'2'})> db.posts.find(){ "_id" : ObjectId("4d2cca114f8e825e1172d59d"), "uri" : "vacio", "title" : "vacio" }{ "_id" : ObjectId("4d2ccaa94f8e825e1172d5a0"), "uri" : "vacio", "title" : "vacio" }{ "_id" : ObjectId("4d2ccade4f8e825e1172d5a1"), "author_id" : "5", "uri" : "/posts/5", "title" : "El leon hambriento5", "summary" : "Un leon con mucha hambre5", "body" : "Cronica de sobre un cuento infantil...5", "comments" : { "name" : "Juan5", "email" : "[email protected]", "content" : "Buen post5" } }{ "_id" : ObjectId("4d2cca844f8e825e1172d59f"), "uri" : "vacio", "title" : "vacio" }>

Page 19: Introduccion mongodb

Jonathan Corona@soequelle

Muchas gracias