2. • 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
5. Iniciando el daemon de la base de datos
bin/mongod --dbpath data
Iniciando el daemon de la base de datos
bin/mongo
6. Iniciando el daemon de la base de datos
Iniciando el daemon de la base de datos
Listando bases de datos
> show dbs
admin
basket
local
7.
8. Crear y Accesar una base de datos
> use blog
switched to db blog
Listar colecciones
> show collections
>
Crear una coleccion
> db.createCollection('posts')
{ "ok" : 1 }
>
Listar colecciones
> show collections
posts
system.indexes
9. Agregando documentos
> use blog
switched 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':'juan@juan.org','content':'Buen post'}})})
10. 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" : "juan@juan.org", "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" : "juan2@juan.org", "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" : "juan3@juan.org", "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" : "juan4@juan.org", "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" : "juan5@juan.org", "content" : "Buen post5" } }
>
11. 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" : "juan@juan.org",
! ! "content" : "Buen post"
! }
}
>
12. 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" : "juan@juan.org", "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" : "juan@juan.org", "content" : "Buen post" } }
>
Número de documentos
> db.posts.find().count()
5
>
13. 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" : "juan@juan.org", "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" : "juan2@juan.org", "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" : "juan3@juan.org", "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" : "juan4@juan.org", "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" : "juan5@juan.org", "content" : "Buen post5" } }
>
14. 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" : "juan5@juan.org", "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" : "juan4@juan.org", "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" : "juan3@juan.org", "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" : "juan2@juan.org", "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" : "juan@juan.org", "content" : "Buen post" } }
>
15. 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" : "juan3@juan.org", "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" : "juan2@juan.org", "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.
16. 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" : "juan3@juan.org",
! ! "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" : "juan3@juan.org",
! ! "content" : "Buen post3"
! },
! "create" : "Fri Feb 11 2011 00:00:00 GMT-0600 (CST)"
}