Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.

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

Transcript of Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.

1

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

[email protected]

@victor_cuervo

Un pequeño sorbo.

MongoDB

2

Busca, lo encontrarás !

http://twitter.com/victor_cuervo

https://github.com/victorcuervo/lineadecodigo_mongodb

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

http://lineadecodigo.com

¿Qué es MongoDB?

Una de CRUD

Modelos de Datos con Arrays

MongoDB Shell. Un poco de Javascript

Python + MongoDB = Pymongo

Y ahora ¿qué?

3

Índice

4

¿Qué es MongoDB?

• Columna

• Hadoop/HBase, Cassandra

• Documento

• MongoDB, CouchDB

• Clave/Valor

• DynamoDB, Redis

• Grafos

• Neo4j, Infinite Graph

http://nosql-database.org

5

Bases de Datos NOSQL

• 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

6

MongoDB

{

"_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"

]

}

7

Documento JSON

8

Una de CRUD

• 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.

9

Una de CRUD

10

• 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});

11

• 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}

);

• Insercióndb.ciudades.insert(

{'ciudad':'Avila',

‘habitantes':58915}

);

• Borradodb.ciudades.delete(

{ciudad:’Zamora’}

);

12

Inserción y Borrado

13

Modelos de Datos con Arrays

• 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, $eachque nos ayudan a manipular los arrays.

14

Modelos de Datos con Arrays

{

“hobbies": [

"python",

"angularjs",

"mongodb"

]

}

• $push - Insertar un elemento en el array

db.users.update({username:"rigodon"},{$push:{hobbies:"Javascript"}})

• $each - Insertar N elementos en el array

db.users.update({username:"rigodon"},

{$push:{hobbies:{$each:["Java","Python","AngularJS"]}}})

• $pull - Eliminar un elemento del array

db.users.update({username:"rigodon"},

{$pull:{hobbies:"Java"}})

15

$push, $each y $pull

16

MongoDB Shell

• 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

17

MongoDB Shell

conn = new Mongo();

db = conn.getDB("demografia");

documento = db.ciudades.findOne();

printjson(documento);

18

Shell y FindOne

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']);

19

Insertar un documento con Shell

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.");

} );

20

Cursores en el Shell

21

Python + MongoDB = Pymongo

• 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 pymongo

pip install pymongo

• Clase principal de pymongo es MongoClient

22

Python + MongoDB = Pymongo

from pymongo import MongoClient

client = MongoClient()

db = client.codemotion

users = 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']

23

Consultas en Pymongo

from flask import Flask, jsonify

from pymongo import MongoClient

app = Flask(__name__)

client = MongoClient('mongodb://localhost:27017/')

db = client.codemotion

users = 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()

24

Servicio REST con Flask + MongoDB

25

Y ahora, ¿qué?

26

Curso de MongoDB y Paradigma de Bases de Datos NOSQL

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

27

Busca, lo encontrarás !

http://twitter.com/victor_cuervo

https://github.com/victorcuervo/lineadecodigo_mongodb

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

http://lineadecodigo.com

28

¿Preguntas?

29