1
http://abirtone.com/formacion/mongodb-esencial/
@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
• 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
• 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
• 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
• 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
• 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
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