Mongodb: Un pequeño sorbo

29
http://abirtone.com/formacion/mongodb-esencial/ [email protected] @victor_cuervo Un pequeño sorbo. MongoDB

Transcript of Mongodb: Un pequeño sorbo

Page 1: Mongodb: Un pequeño sorbo

http://abirtone.com/formacion/mongodb-esencial/

[email protected]

@victor_cuervo

Un pequeño sorbo.

MongoDB

Page 2: Mongodb: Un pequeño sorbo

Busca, lo encontrarás !

http://twitter.com/victor_cuervo

https://github.com/victorcuervo/lineadecodigo_mongodb

http://www.slideshare.net/victorcuervo/

http://lineadecodigo.com

Page 3: Mongodb: Un pequeño sorbo

¿Qué es MongoDB?Una de CRUDModelos de Datos con ArraysMongoDB Shell. Un poco de JavascriptPython + MongoDB = PymongoY ahora ¿qué?

Índice

Page 4: Mongodb: Un pequeño sorbo

¿Qué es MongoDB?

Page 5: Mongodb: Un pequeño sorbo

• Columna• Hadoop/HBase, Cassandra

• Documento• MongoDB, CouchDB

• Clave/Valor• DynamoDB, Redis

• Grafos• Neo4j, Infinite Graph

http://nosql-database.org

Bases de Datos NOSQL

Page 6: Mongodb: Un pequeño sorbo

•Base de datos NOSQL orientada a documentos (BSON-JSON).

•Trabajo con modelos de datos flexibles.•Proporciona alto rendimiento y alta escalabilidad.

•Ofrece múltiples APIs sobre diferentes lenguajes de programación: java, python, shell, nodejs, go,…

•Maneja bases de datos, colecciones, campos, indices,…y no permite hacer un xxxxxx join. $lookup

MongoDB

Page 7: Mongodb: Un pequeño sorbo

{ "_id": ObjectId("565914732c23d80f730a1f49"), "gender": "M", "name": “Julio Sanchez", "username": "jsanchezs", "birthday": "06/11/1977", "email": "[email protected]", "social": { "facebook": “http://facebook.com/julio.sanchez“, "twitter": “http://twitter.com/jjsanch“, "linkedin": “http://es.linkedin.com/juliosanchez“ }, "description": "Soy una persona afable, estudioso y amigo de mis amigos.”, "hobbies": [ "python", "angularjs", "mongodb" ]}

Documento JSON

Page 8: Mongodb: Un pequeño sorbo

Una de CRUD

Page 9: Mongodb: Un pequeño sorbo

• Las operaciones del CRUD en MongoDB se realizan con los métodos:• Insert• Find• Update/Save• Delete

• Siempre se antepone el nombre de la colección:db.collection.operacion({documento})

• El contenido de la operación siempre será un documento JSON.

Una de CRUD

Page 10: Mongodb: Un pequeño sorbo

• Consulta Básicadb.ciudades.find({ciudad:’Madrid'});

• Consulta con Filtrodb.ciudades.find({

habitantes:{$lt:400000}});

• Ordenacionesdb.ciudades.find().sort({

ciudad:1});

Consultas• Consultas con conjuntosdb.ciudades.find({ciudad:

{$in:[‘Avila','Zamora','Madrid']}});

• Projectiondb.ciudades.find({

habitantes:{$gt:1000000}},{ciudad:1});

Page 11: Mongodb: Un pequeño sorbo

• Actualización Básicadb.ciudades.update(

{ciudad:'Avila'},{$set:{habitantes:58915}

});

• Actualización Múltipledb.ciudades.update({

habitantes:{$gt:600000}},{$set:{‘grande’:true}},{multi:true}

);

Actualizaciones• Upsert - Se puede hacer con

un Savedb.ciudades.update({

ciudad:'Zamora'},{$set:{habitantes:65362}},{upsert:true}

);

Page 12: Mongodb: Un pequeño sorbo

• Insercióndb.ciudades.insert(

{'ciudad':'Avila',‘habitantes':58915}

);

• Borradodb.ciudades.delete(

{ciudad:’Zamora’});

Inserción y Borrado

Page 13: Mongodb: Un pequeño sorbo

Modelos de Datos con Arrays

Page 14: Mongodb: Un pequeño sorbo

• Una de las características de MongoDB es poder crear campos que sean arrays de datos.• Los Arrays pueden contener valores o

una colección de subdocumentos.• Existen los operadores $push, $pull, $each que nos ayudan a manipular los arrays.

Modelos de Datos con Arrays

{ …

“hobbies": [

"python",

"angularjs",

"mongodb" ] …}

Page 15: Mongodb: Un pequeño sorbo

• $push - Insertar un elemento en el arraydb.users.update({username:"rigodon"},{$push:{hobbies:"Javascript"}})• $each - Insertar N elementos en el arraydb.users.update({username:"rigodon"}, {$push:{hobbies:{$each:["Java","Python","AngularJS"]}}}) • $pull - Eliminar un elemento del arraydb.users.update({username:"rigodon"}, {$pull:{hobbies:"Java"}})

$push, $each y $pull

Page 16: Mongodb: Un pequeño sorbo

MongoDB Shell

Page 17: Mongodb: Un pequeño sorbo

• Se pueden ejecutar operaciones sobre MongoDB mediante un Shell Javascript.• El Shell Javascript permite todas las operaciones disponibles

en MongoDB así como el manejo básico de las operaciones Javascript.• Para ejecutar un shell de MongoDB escribimos

mongo fichero.js

MongoDB Shell

Page 18: Mongodb: Un pequeño sorbo

conn = new Mongo();db = conn.getDB("demografia");

documento = db.ciudades.findOne();

printjson(documento);

Shell y FindOne

Page 19: Mongodb: Un pequeño sorbo

conn = new Mongo();db = conn.getDB("demografia");

var documento = new Object();documento.ciudad = "Salamanca";documento.habitantes = 154462;x = db.ciudades.insert(documento);

print ('El número de documentos insertado es de '+ x['nInserted']);

Insertar un documento con Shell

Page 20: Mongodb: Un pequeño sorbo

conn = new Mongo();db = conn.getDB("demografia");

function cursor (doc) {print("En " + doc.ciudad + " hay " + doc.habitantes + " habitantes.");

}

db.ciudades.find().forEach(cursor);

db.ciudades.find().forEach( function(doc) {print("En " + doc.ciudad + " hay " + doc.habitantes + " habitantes.");

} );

Cursores en el Shell

Page 21: Mongodb: Un pequeño sorbo

Python + MongoDB = Pymongo

Page 22: Mongodb: Un pequeño sorbo

• Pymongo es el driver que se utiliza desde Python para poder acceder a una base de datos MongoDB. Actualmente tenemos pymongo 3.2.

• La documentación de pymongo está en https://api.mongodb.org/python/current/

• Instalar pymongopip install pymongo

• Clase principal de pymongo es MongoClient

Python + MongoDB = Pymongo

Page 23: Mongodb: Un pequeño sorbo

from pymongo import MongoClient

client = MongoClient()db = client.codemotionusers = db.users

usuario = { 'gender':'M', 'hobbies': 'tv'}

miusuario = users.find_one(usuario)print miusuario['name']

contador = users.find(usuario).count()print contador

cursor = users.find(usuario)for miusuario in cursor: print miusuario['name']

Consultas en Pymongo

Page 24: Mongodb: Un pequeño sorbo

from flask import Flask, jsonifyfrom pymongo import MongoClient

app = Flask(__name__)

client = MongoClient('mongodb://localhost:27017/')db = client.codemotionusers = db.users

@app.route('/user/<id>')def usuario(id):

filtro = { 'username':id } projection = { '_id':0 }

consulta = users.find_one(filtro,projection)

print consulta

return jsonify({'resultado':consulta})

if __name__ == '__main__': app.run()

Servicio REST con Flask + MongoDB

Page 25: Mongodb: Un pequeño sorbo

Y ahora, ¿qué?

Page 26: Mongodb: Un pequeño sorbo

Curso de MongoDB y Paradigma de Bases de Datos NOSQL

http://abirtone.com/formacion/mongodb-esencial/

Page 27: Mongodb: Un pequeño sorbo

Busca, lo encontrarás !

http://twitter.com/victor_cuervo

https://github.com/victorcuervo/lineadecodigo_mongodb

http://www.slideshare.net/victorcuervo/

http://lineadecodigo.com

Page 28: Mongodb: Un pequeño sorbo

¿Preguntas?

Page 29: Mongodb: Un pequeño sorbo