SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Mi primera aplicación con MongoDB
{ nombre: “Alejandro Mancilla”,
puesto: “Senior Solutions Architect, LATAM”,
email: “alejandro.mancilla@mongodb.com”,
twitter_id: “@alxmancilla” }
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Agenda
• Breve introducción a MongoDB
• Vocabulario básico
• Instalación de MongoDB
• Construcción de una aplicación básica
• Añadir un índice
• Optimización de consultas con explain()
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
DBs relacionales
Expressive Query Language
& Secondary Indexes
Data Integrity
Enterprise Management
& Integrations
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
El mundo ha cambiado
Datos Riesgo Tiempo Costos
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Scalability
& Performance
Always On,
Global Deployments
FlexibilityExpressive Query Language
& Secondary Indexes
Data Integrity
Enterprise Management
& Integrations
DBs NoSQL
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Arquitectura Nexus
Scalability
& Performance
Sharding
Always On,
Global Deployments
Replica Set
Flexibility
Modelo documentalExpressive Query Language
& Secondary Indexes
MongoDB Query Language - MQL
Data Integrity
Enterprise Management
& Integrations
Ops Manager, BI Connector,
Compass, Drivers
MongoDB combina lo mejor de ambos mundos
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Vocabulario básico
Relacional MongoDB
Base de datos Base de datos
Tabla Colección
Registro Documento
Índice Índice
Joins Subdocumento / Lookup
Llave foránea Referencia
Transacción multi-tabla Transacción en un documento
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Modelo Documental
• No nos referimos a documentos PDFs, Microsoft Word o HTML
• Los documentos son estructuras anidadas usando Javascript Object Notation (JSON)
{
name : “Alejandro Mancilla”,
title : “Senior Solutions Architect”,
employee_number : 999,
location : {
type : “Point”,
coordinates : [ 43.34, -3.26 ]},
expertise: [ “MongoDB”, “Java”, “Python” ],
address : {
address1 : “Av. Javier Barros Sierra 495”,
address2 : “Santa Fe, CDMX”,
zipcode : “01234”,
}
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Documentos son Estructuras Ricas
{
name : “Alejandro Mancilla”,
title : “Senior Solutions Architect”,
employee_number : 999,
location : {
type : “Point”,
coordinates : [ 43.34, -3.26 ]},
expertise: [ “MongoDB”, “Java”, “Python” ],
address : {
address1 : “Av. Javier Barros Sierra 495”,
address2 : “Santa Fe, CDMX”,
zipcode : “01234”,
}
}
Campos pueden contener
sub-documentos
Tipos de valores de campos
Campos pueden contener arreglos
Campos
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
• Desde la primera versión, ya era una base de datos JSON nativa
• Entiende y puede indexar las subestructuras
• Almacena JSON como un formato binario serializado llamado
BSON
• Eficiente para codificación y decodificación para transmisión de red
• MongoDB puede crear índices en cualquier campo del documento
MongoDB realmente habla JSON
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
MongoDB lo tiene todo
Consultas
Ricas
Encontrar a todos los Solution Architects
Encontrar a todos los empleados que saben Java en
Support o Consulting
Geoespacial
Encontrar a todos los empleados actualmente en
México
Búsqueda
Textual
Encontrar a todos los empleados que se describan a sí
mismos como “self-driven”
Agregación
Calcular la distancia promedio a la Oficina para todos
los empleados
Map Reduce
¿Cuáles son los skills mas comunes por region en el
tiempo? (es node.js una moda en Brasil?)
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Desarrollo – en el pasado
{ CODE } DB SCHEMAXML CONFIG
APPLICATION RELATIONAL DATABASE
OBJECT RELATIONAL
MAPPING
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Desarrollo con MongoDB
{ CODE } DB SCHEMAXML CONFIG
APPLICATION RELATIONAL DATABASE
OBJECT RELATIONAL
MAPPING
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Instalando MongoDB
$ curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.6.3.tgz
$ tar xzvf mongodb-osx-ssl-x86_64-3.6.3.tgz
x mongodb-osx-x86_64-3.6.3/README
x mongodb-osx-x86_64-3.6.3/THIRD-PARTY-NOTICES
x mongodb-osx-x86_64-3.6.3/MPL-2
x mongodb-osx-x86_64-3.6.3/GNU-AGPL-3.0
x mongodb-osx-x86_64-3.6.3/bin/mongodump
x mongodb-osx-x86_64-3.6.3/bin/mongorestore
x mongodb-osx-x86_64-3.6.3/bin/mongoexport
x mongodb-osx-x86_64-3.6.3/bin/mongoimport
x mongodb-osx-x86_64-3.6.3/bin/mongostat
x mongodb-osx-x86_64-3.6.3/bin/mongotop
x mongodb-osx-x86_64-3.6.3/bin/bsondump
x mongodb-osx-x86_64-3.6.3/bin/mongofiles
x mongodb-osx-x86_64-3.6.3/bin/mongoreplay
x mongodb-osx-x86_64-3.6.3/bin/mongoperf
x mongodb-osx-x86_64-3.6.3/bin/mongod
x mongodb-osx-x86_64-3.6.3/bin/mongos
x mongodb-osx-x86_64-3.6.3/bin/mongo
x mongodb-osx-x86_64-3.6.3/bin/install_compass
$ mkdir /data/webinar
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Ejecutando mongod
mancilla:mongodb-osx-x86_64-3.6.3 mancilla$ ./bin/mongod -dbpath /data/webinar
2018-03-02T00:26:35.757-0600 I CONTROL [initandlisten] MongoDB starting : pid=62447 port=27017
dbpath=data 64-bit host=mancilla.local
2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] db version v3.6.3
2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] git version:
9586e557d54ef70f9ca4b43c26892cd55257e1a5
2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] OpenSSL version: OpenSSL 0.9.8zh 14 Jan 2016
2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] allocator: system
2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] modules: none
2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] build environment:
2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] distarch: x86_64
2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] target_arch: x86_64
2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] options: { storage: {dbPath: "/data/webinar" }
}2018-03-02T00:26:35.759-0600 I STORAGE [initandlisten] wiredtiger_open config:
create,cache_size=7680M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statis
tics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=
100000),statistics_log=(wait=0),verbose=(recovery_progress),
2018-03-02T00:26:36.861-0600 I CONTROL [initandlisten]
2018-03-02T00:26:37.236-0600 I NETWORK [initandlisten] waiting for connections on port 27017
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Interactuando via mongo shell
mancilla$ ./bin/mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.6.3
> show databases
local 0.000GB
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Insertando tu primer documento
> use webinar
switched to db webinar
> show databases
local 0.000GB
> db.demo.insert({"nombre": "amancilla", "fecha": new ISODate()})
WriteResult({ "nInserted" : 1 })
> show databases
webinar 0.000GB
local 0.000GB
> show collections
demo
> db.demo.findOne()
{
"_id" : ObjectId("5a98f27946b52ff3efab305c"),
"nombre" : "amancilla",
"fecha" : ISODate("2018-03-01T16:43:05.001Z")
}
>
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Object ID
5a98f27946b52ff3efab305c
TS------ID----PID-Count-
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Usando Compass
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Una aplicación simple de Blog
• Creemos un gestor de blogs con:
• Artículos
• Usuarios
• Comentarios
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Típico Diagrama Entidad-Relación
User
·Name
·Email address
Category
·Name
·URL
Comment
·Comment
·Date
·Author
Article
·Name
·Slug
·Publish date
·Text
Tag
·Name
·URL
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
En MongoDB construimos orgánicamente
> use blog
switched to db blog
> db.users.insert( { "username" : "amancilla", "password"
: "top secret", "lang" : "ES" } )
WriteResult({ "nInserted" : 1 })
> db.users.findOne()
{
"_id" : ObjectId("573afff65ee4be80385332a7"),
"username" : "amancilla",
"password" : "top secret",
"lang" : "ES"
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
¿Cómo hacemos esto en un programa?
package com.mongodb.webinar;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
public class Demo {
public static void main(String[] args) {
MongoClient client = new MongoClient();
MongoDatabase blog = client.getDatabase("blog");
MongoCollection<Document> users = blog.getCollection("users");
Document user = new Document("user", "amancilla")
.append("password", "top secret")
.append("lang", "ES");
users.insertOne(user);
}
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Continuemos con artículos
import [+]
import static java.util.Arrays.asList;
public class Demo {
public static void main(String[] args) {
MongoClient client = new MongoClient();
MongoDatabase blog = client.getDatabase("blog");
MongoCollection<Document> articulos = blog.getCollection("articles");
String myName = "amancilla";
Document articulo = new Document(”title","My article")
.append("author", myName)
.append("body", "Lorem ipsum dolor sit amet, […] commodo consequat.")
.append("tags", asList("demo","español","MongoDB"));
articulos.insertOne(articulo);
}
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Creemos un nuevo tipo de artículo
public class Demo {
static DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"
, Locale.ENGLISH);
public static void main(String[] args) {
MongoClient client = new MongoClient();
MongoDatabase blog = client.getDatabase("blog");
MongoCollection<Document> articulos = blog.getCollection("articles");
String myName = "amancilla";
Document articulo = new Document(”title","My article")
.append("author", myName)
.append("body", "Lorem ipsum dolor sit amet […] commodo consequat.")
.append("tags", asList("demo", "español", "MongoDB"))
.append("postdate", new Date());
articulos.insertOne(articulo);
}
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Insertemos muchos artículos
public class Demo {
static DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"
, Locale.ENGLISH);
public static void main(String[] args) {
MongoClient client = new MongoClient();
MongoDatabase blog = client.getDatabase("blog");
MongoCollection<Document> articulos = blog.getCollection("articles");
List<Document> list = new ArrayList<Document>();
for (int i=0; i<1000000; i++){
Document articulo = new Document("title”, "Mi artículo " + i)
.append("author", "USER_" + Math.round(Math.random()*10000))
.append("body", "Lorem ipsum dolor sit amet, […] ex ea commodo consequat.")
.append("tags", asList("demo", "español", "MongoDB"))
.append("postdate", new Date());
list.add(articulo);
if (i % 5000 == 4999){
articulos.insertMany(list);
list.clear();
}
}
}
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Encuentre un Usuario
> db.users.findOne()
{
"_id" : ObjectId("5742da5bb26a88bc00e941ac"),
"username" : "USER_0",
"lang" : "EN",
"password" : "vTlILbGWLt",
"followers" : 448
}
> db.users.find( { "username" : "USER_45" } ).pretty()
{
"_id" : ObjectId("5742da5bb26a88bc00e94206"),
"username" : "USER_45",
"lang" : "EN",
"password" : "GmRLnCeKVp",
"followers" : 284
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Encuentre usuarios con más followers
> db.users.find( { "followers" : { $gte : 450 }} ).pretty()
{
"_id" : ObjectId("5742da5bb26a88bc00e941ae"),
"username" : "USER_1",
"lang" : "EN",
"password" : "bCSKSKvUeb",
"followers" : 487
}
{
"_id" : ObjectId("5742da5bb26a88bc00e941e4"),
"username" : "USER_28",
"lang" : "EN",
"password" : "HAWpiATCBN",
"followers" : 473
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Usando proyección
> db.users.find( { "followers" : { $gte : 450 }}, { "_id" : 0,
username : 1, followers: 1 } )
{ "username" : "USER_1", "followers" : 487 }
{ "username" : "USER_28", "followers" : 473 }
{ "username" : "USER_31", "followers" : 493 }
{ "username" : "USER_48", "followers" : 464 }
{ "username" : "USER_51", "followers" : 487 }
{ "username" : "USER_61", "followers" : 493 }
{ "username" : "USER_106", "followers" : 493 }
{ "username" : "USER_113", "followers" : 455 }
{ "username" : "USER_128", "followers" : 460 }
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Usando sort
> db.users.find({”followers”: {$gte: 450}},{"_id”: 0, username: 1,
followers: 1}).sort({”followers”: 1})
{ "username" : "USER_1", "followers" : 493 }
{ "username" : "USER_28", "followers" : 493 }
{ "username" : "USER_31", "followers" : 487 }
{ "username" : "USER_48", "followers" : 474}
{ "username" : "USER_51", "followers" : 473 }
{ "username" : "USER_61", "followers" : 468 }
{ "username" : "USER_106", "followers" : 464 }
{ "username" : "USER_113", "followers" : 461 }
{ "username" : "USER_128", "followers" : 461 }
{ "username" : "KKJXBACBVN_134", "followers" : 460 }
{ "username" : "PTNTIBGAJV_165", "followers" : 458 }
{ "username" : "PVLCQJIGDY_169", "followers" : 455 }
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Actualizar artículo : añadir comentarios 1
> db.articles.find( { "_id" : 19 } ).pretty()
{
"_id" : 19,
"body" :
"nTzOofOcnHKkJxpjKAyqTTnKZMFzzkWFeXtBRuEKsctuGBgWIrEBrYdvFI
VHJWaXLUTVUXblOZZgUqWu",
"postdate" : ISODate("2016-05-23T12:02:46.830Z"),
"author" : "USER_19",
"title" : "CPMaqHtAdRwLXhlUvsej"
}
> db.articles.update( { _id : 18 }, { $set : { comments :
[] }} )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified"
: 1 })
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Actualizar artículo : añadir comentarios 2
> db.articles.find( { _id :18 } ).pretty()
{
"_id" : 18,
"body" :
"KmwFSIMQGcIsRNTDBFPuclwcVJkoMcrIPwTiSZDYyatoKzeQiKvJkiVSrn
dXqrALVIYZxGpaMjucgXUV",
"postdate" : ISODate("2016-05-23T16:04:39.497Z"),
"author" : "USER_18",
"title" : "wTLreIEyPfovEkBhJZZe",
"comments" : [ ]
}
>
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Actualizar artículo : añadir comentarios 3
> db.articles.update( { _id : 18 }, { $push : { comments : { username : ”USER_123",
comment : "Primer comentario!" }}} )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.articles.find( { _id :18 } ).pretty()
{
"_id" : 18,
"body" :
"KmwFSIMQGcIsRNTDBFPuclJkoMcrIPwTiSZDYyatoKzeQiKvJkiVSrndXqrALVIYZxGpaMjucgXUV",
"postdate" : ISODate("2016-05-23T16:04:39.497Z"),
"author" : "USER_18",
"title" : "wTLreIEyPfovEkBhJZZe",
"comments" : [
{
"username" : "USER_123",
"comment" : ”Primer comentario!"
}
]
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Eliminar artículos
> db.articles.remove( { "_id" : 25 } )
WriteResult({ "nRemoved" : 1 })
> db.articles.remove( { "_id" : 25 } )
WriteResult({ "nRemoved" : 0 })
> db.articles.remove( { "_id" : { $lte : 5 }} )
WriteResult({ "nRemoved" : 6 })
• Eliminar una colección es más barato que eliminar una colección grande
elemento por elemento
> db.articles.drop()
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Recordemos Usuarios y Artículos
> db.users.findOne()
{
"_id" : ObjectId("57431c07b26a88bf060e10cb"),
"username" : "USER_0",
"lang" : "EN",
"password" : "kGIxPxqKGJ",
"followers" : 266
}
> db.articles.findOne()
{
"_id" : 0,
"body" :
"hvJLnrrfZQurmtjPfUWbMhaQLZjsxHXbUycmJVZTeOZesTnZtojThrebRcUoiYwivjpwG",
"postdate" : ISODate("2016-05-23T16:04:39.246Z"),
"author" : "USER_0",
"title" : "gpNIoPxpfTAxWjzAVoTJ"
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Encuentre un Usuario – explain()
> db.users.find( { "username" : "USER_123" } ).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "blog.users",
"indexFilterSet" : false,
"parsedQuery" : {
"username" : {
"$eq" : ”USER_123"
}
},
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"username" : {
"$eq" : ”USER_123"
}
},
"direction" : "forward"
},
"rejectedPlans" : [ ]
} "ok" : 1
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Encuentre un Usuario – Execution Stats
> db.users.find( {"username" : "USER_9999" } ).explain( "executionStats" ).executionStats
{
"executionSuccess" : true,
"nReturned" : 1,
"executionTimeMillis" : 433,
"totalKeysExamined" : 0,
"totalDocsExamined" : 1000000,
"executionStages" : {
"stage" : "COLLSCAN",
"filter" : {
"username" : {
"$eq" : "USER_999”}
},
"nReturned" : 1,
"executionTimeMillisEstimate" : 330,
"works" : 1000002,
"advanced" : 1,
"needTime" : 1000000,
"needYield" : 0,
"saveState" : 7812,
"restoreState" : 7812,
"isEOF" : 1,
"invalidates" : 0,
"direction" : "forward",
"docsExamined" : 1000000
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Etapas de ejecución del plan de consulta
• COLLSCAN : para un escaneo de colección
• IXSCAN : para un escaneo de índices
• FETCH : para recuperar documentos
• SHARD_MERGE : para fusionar resultados de shards
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Necesitamos un índice
> db.users.createIndex( { username : 1 } )
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Introducción a índices
• Tome en cuenta lo siguiente
• Background : Cree un índice en background, en lugar de bloquear la base de datos
• Unicidad : Todas las claves en la colección deben ser únicas. Las inserciones de
claves duplicadas se rechazarán con un error.
• Nombre : nombrar explícitamente un índice. De lo contrario, el nombre del índice se
genera automáticamente a partir de los campos de índice.
• Para eliminar un índice
• db.users.dropIndex({ “username” : 1 })
• Obtener todos los índices de una colección
• db.users.getIndexes()
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Encuentre un Usuario con índices
> db.users.find( {"username" : "USER_999”}).explain("executionStats”).executionStats
{
"executionSuccess" : true,
"nReturned" : 1,
"executionTimeMillis" : 0,
"totalKeysExamined" : 1,
"totalDocsExamined" : 1,
…
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Encuentre un Usuario - FETCH & IXSCAN
"executionStages" : {
"stage" : "FETCH",
"nReturned" : 1,
"executionTimeMillisEstimate" : 0,
"docsExamined" : 1,,
"inputStage" : {
"stage" : "IXSCAN",
"nReturned" : 1,
"executionTimeMillisEstimate" : 0,
"keyPattern" : {
"username" : 1},
"indexName" : "username_1",
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"username" : [
"["USER_999", "USER_999"]”]},
"keysExamined" : 1,
"seenInvalidated" : 0 } } }
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
Drivers y Frameworks
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
En MongoDB 4.0 tendremos
transacciones multi-documentos
{ webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] }
¿Qué hemos aprendido?
• Cómo crear una base de datos y una colección
• Cómo insertar documentos
• Cómo realizar búsquedas
• Cómo hacer modificaciones de los documentos existentes
• Cómo borrar documentos
• Cómo comprobar la eficiencia de una operación
• Cómo crear índices
• Cómo averiguar los índices que se utilizan en una operación
¿Preguntas?
Mi primera aplicación con MongoDB
{ nombre: “Alejandro Mancilla”,
puesto: “Senior Solutions Architect, LATAM”,
email: “alejandro.mancilla@mongodb.com”,
twitter_id: “@alxmancilla” }
Mi primera aplicación con MongoDB

Weitere ähnliche Inhalte

Ähnlich wie Mi primera aplicación con MongoDB

CLASE03_TEMA02_2.pptx
CLASE03_TEMA02_2.pptxCLASE03_TEMA02_2.pptx
CLASE03_TEMA02_2.pptxDiseoGrfico14
 
la mejor forma de Conectar c# con mysql con archivos de configuracion
 la mejor forma de Conectar c# con mysql con archivos de configuracion  la mejor forma de Conectar c# con mysql con archivos de configuracion
la mejor forma de Conectar c# con mysql con archivos de configuracion juandavid1118
 
Taller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaTaller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaLuis Beltran
 
CouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidCouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidRicardo Monagas Medina
 
Taller definición de apis
Taller definición de apisTaller definición de apis
Taller definición de apisCloudAppi
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Sorey García
 
Edwin montilla trabajo corte 3
Edwin montilla trabajo corte 3Edwin montilla trabajo corte 3
Edwin montilla trabajo corte 3EdwinMontilla5
 
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxEvolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxLuis775803
 
1 tutorial de mongo db
1 tutorial de mongo db1 tutorial de mongo db
1 tutorial de mongo db.. ..
 
Vb aspx sitio
Vb aspx sitioVb aspx sitio
Vb aspx sitiojlmanmons
 
IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014Adrian Diaz Cervera
 
Original Hacker 5
Original Hacker 5Original Hacker 5
Original Hacker 5Huehue 1
 
Greach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBGreach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBgreach_es
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETAlberto Diaz Martin
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
 
Desarrollo en Capas con .Net
Desarrollo en Capas con .NetDesarrollo en Capas con .Net
Desarrollo en Capas con .NetJorge Ercoli
 

Ähnlich wie Mi primera aplicación con MongoDB (20)

CLASE03_TEMA02_2.pptx
CLASE03_TEMA02_2.pptxCLASE03_TEMA02_2.pptx
CLASE03_TEMA02_2.pptx
 
la mejor forma de Conectar c# con mysql con archivos de configuracion
 la mejor forma de Conectar c# con mysql con archivos de configuracion  la mejor forma de Conectar c# con mysql con archivos de configuracion
la mejor forma de Conectar c# con mysql con archivos de configuracion
 
Taller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaTaller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataforma
 
CouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidCouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones Android
 
Taller definición de apis
Taller definición de apisTaller definición de apis
Taller definición de apis
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)
 
Edwin montilla trabajo corte 3
Edwin montilla trabajo corte 3Edwin montilla trabajo corte 3
Edwin montilla trabajo corte 3
 
Mongo db dtalk
Mongo db dtalkMongo db dtalk
Mongo db dtalk
 
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxEvolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
 
1 tutorial de mongo db
1 tutorial de mongo db1 tutorial de mongo db
1 tutorial de mongo db
 
Guiapractica de bd completa
Guiapractica de bd completaGuiapractica de bd completa
Guiapractica de bd completa
 
Semana 3 MONGODB conceptos básicos NOSQL
Semana 3   MONGODB conceptos básicos NOSQLSemana 3   MONGODB conceptos básicos NOSQL
Semana 3 MONGODB conceptos básicos NOSQL
 
Vb aspx sitio
Vb aspx sitioVb aspx sitio
Vb aspx sitio
 
IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014
 
Original Hacker 5
Original Hacker 5Original Hacker 5
Original Hacker 5
 
Greach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBGreach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DB
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Desarrollo en Capas con .Net
Desarrollo en Capas con .NetDesarrollo en Capas con .Net
Desarrollo en Capas con .Net
 

Mehr von Software Guru

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasSoftware Guru
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesSoftware Guru
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environmentsSoftware Guru
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorSoftware Guru
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealSoftware Guru
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowSoftware Guru
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:Software Guru
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learningSoftware Guru
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDiSoftware Guru
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Software Guru
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSSoftware Guru
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...Software Guru
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?Software Guru
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Software Guru
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsSoftware Guru
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosSoftware Guru
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressSoftware Guru
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsSoftware Guru
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Software Guru
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoSoftware Guru
 

Mehr von Software Guru (20)

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las Cosas
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
 

Kürzlich hochgeladen

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 

Kürzlich hochgeladen (12)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

Mi primera aplicación con MongoDB

  • 1.
  • 2. Mi primera aplicación con MongoDB { nombre: “Alejandro Mancilla”, puesto: “Senior Solutions Architect, LATAM”, email: “alejandro.mancilla@mongodb.com”, twitter_id: “@alxmancilla” }
  • 3. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Agenda • Breve introducción a MongoDB • Vocabulario básico • Instalación de MongoDB • Construcción de una aplicación básica • Añadir un índice • Optimización de consultas con explain()
  • 4. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } DBs relacionales Expressive Query Language & Secondary Indexes Data Integrity Enterprise Management & Integrations
  • 5. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } El mundo ha cambiado Datos Riesgo Tiempo Costos
  • 6. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Scalability & Performance Always On, Global Deployments FlexibilityExpressive Query Language & Secondary Indexes Data Integrity Enterprise Management & Integrations DBs NoSQL
  • 7. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Arquitectura Nexus Scalability & Performance Sharding Always On, Global Deployments Replica Set Flexibility Modelo documentalExpressive Query Language & Secondary Indexes MongoDB Query Language - MQL Data Integrity Enterprise Management & Integrations Ops Manager, BI Connector, Compass, Drivers MongoDB combina lo mejor de ambos mundos
  • 8. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Vocabulario básico Relacional MongoDB Base de datos Base de datos Tabla Colección Registro Documento Índice Índice Joins Subdocumento / Lookup Llave foránea Referencia Transacción multi-tabla Transacción en un documento
  • 9. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Modelo Documental • No nos referimos a documentos PDFs, Microsoft Word o HTML • Los documentos son estructuras anidadas usando Javascript Object Notation (JSON) { name : “Alejandro Mancilla”, title : “Senior Solutions Architect”, employee_number : 999, location : { type : “Point”, coordinates : [ 43.34, -3.26 ]}, expertise: [ “MongoDB”, “Java”, “Python” ], address : { address1 : “Av. Javier Barros Sierra 495”, address2 : “Santa Fe, CDMX”, zipcode : “01234”, } }
  • 10. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Documentos son Estructuras Ricas { name : “Alejandro Mancilla”, title : “Senior Solutions Architect”, employee_number : 999, location : { type : “Point”, coordinates : [ 43.34, -3.26 ]}, expertise: [ “MongoDB”, “Java”, “Python” ], address : { address1 : “Av. Javier Barros Sierra 495”, address2 : “Santa Fe, CDMX”, zipcode : “01234”, } } Campos pueden contener sub-documentos Tipos de valores de campos Campos pueden contener arreglos Campos
  • 11. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } • Desde la primera versión, ya era una base de datos JSON nativa • Entiende y puede indexar las subestructuras • Almacena JSON como un formato binario serializado llamado BSON • Eficiente para codificación y decodificación para transmisión de red • MongoDB puede crear índices en cualquier campo del documento MongoDB realmente habla JSON
  • 12. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } MongoDB lo tiene todo Consultas Ricas Encontrar a todos los Solution Architects Encontrar a todos los empleados que saben Java en Support o Consulting Geoespacial Encontrar a todos los empleados actualmente en México Búsqueda Textual Encontrar a todos los empleados que se describan a sí mismos como “self-driven” Agregación Calcular la distancia promedio a la Oficina para todos los empleados Map Reduce ¿Cuáles son los skills mas comunes por region en el tiempo? (es node.js una moda en Brasil?)
  • 13. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Desarrollo – en el pasado { CODE } DB SCHEMAXML CONFIG APPLICATION RELATIONAL DATABASE OBJECT RELATIONAL MAPPING
  • 14. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Desarrollo con MongoDB { CODE } DB SCHEMAXML CONFIG APPLICATION RELATIONAL DATABASE OBJECT RELATIONAL MAPPING
  • 15. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Instalando MongoDB $ curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.6.3.tgz $ tar xzvf mongodb-osx-ssl-x86_64-3.6.3.tgz x mongodb-osx-x86_64-3.6.3/README x mongodb-osx-x86_64-3.6.3/THIRD-PARTY-NOTICES x mongodb-osx-x86_64-3.6.3/MPL-2 x mongodb-osx-x86_64-3.6.3/GNU-AGPL-3.0 x mongodb-osx-x86_64-3.6.3/bin/mongodump x mongodb-osx-x86_64-3.6.3/bin/mongorestore x mongodb-osx-x86_64-3.6.3/bin/mongoexport x mongodb-osx-x86_64-3.6.3/bin/mongoimport x mongodb-osx-x86_64-3.6.3/bin/mongostat x mongodb-osx-x86_64-3.6.3/bin/mongotop x mongodb-osx-x86_64-3.6.3/bin/bsondump x mongodb-osx-x86_64-3.6.3/bin/mongofiles x mongodb-osx-x86_64-3.6.3/bin/mongoreplay x mongodb-osx-x86_64-3.6.3/bin/mongoperf x mongodb-osx-x86_64-3.6.3/bin/mongod x mongodb-osx-x86_64-3.6.3/bin/mongos x mongodb-osx-x86_64-3.6.3/bin/mongo x mongodb-osx-x86_64-3.6.3/bin/install_compass $ mkdir /data/webinar
  • 16. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Ejecutando mongod mancilla:mongodb-osx-x86_64-3.6.3 mancilla$ ./bin/mongod -dbpath /data/webinar 2018-03-02T00:26:35.757-0600 I CONTROL [initandlisten] MongoDB starting : pid=62447 port=27017 dbpath=data 64-bit host=mancilla.local 2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] db version v3.6.3 2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] git version: 9586e557d54ef70f9ca4b43c26892cd55257e1a5 2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] OpenSSL version: OpenSSL 0.9.8zh 14 Jan 2016 2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] allocator: system 2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] modules: none 2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] build environment: 2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] distarch: x86_64 2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] target_arch: x86_64 2018-03-02T00:26:35.758-0600 I CONTROL [initandlisten] options: { storage: {dbPath: "/data/webinar" } }2018-03-02T00:26:35.759-0600 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=7680M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statis tics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time= 100000),statistics_log=(wait=0),verbose=(recovery_progress), 2018-03-02T00:26:36.861-0600 I CONTROL [initandlisten] 2018-03-02T00:26:37.236-0600 I NETWORK [initandlisten] waiting for connections on port 27017
  • 17. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Interactuando via mongo shell mancilla$ ./bin/mongo MongoDB shell version v3.6.3 connecting to: mongodb://127.0.0.1:27017/ MongoDB server version: 3.6.3 > show databases local 0.000GB
  • 18. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Insertando tu primer documento > use webinar switched to db webinar > show databases local 0.000GB > db.demo.insert({"nombre": "amancilla", "fecha": new ISODate()}) WriteResult({ "nInserted" : 1 }) > show databases webinar 0.000GB local 0.000GB > show collections demo > db.demo.findOne() { "_id" : ObjectId("5a98f27946b52ff3efab305c"), "nombre" : "amancilla", "fecha" : ISODate("2018-03-01T16:43:05.001Z") } >
  • 19. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Object ID 5a98f27946b52ff3efab305c TS------ID----PID-Count-
  • 20. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Usando Compass
  • 21. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Una aplicación simple de Blog • Creemos un gestor de blogs con: • Artículos • Usuarios • Comentarios
  • 22. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Típico Diagrama Entidad-Relación User ·Name ·Email address Category ·Name ·URL Comment ·Comment ·Date ·Author Article ·Name ·Slug ·Publish date ·Text Tag ·Name ·URL
  • 23. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } En MongoDB construimos orgánicamente > use blog switched to db blog > db.users.insert( { "username" : "amancilla", "password" : "top secret", "lang" : "ES" } ) WriteResult({ "nInserted" : 1 }) > db.users.findOne() { "_id" : ObjectId("573afff65ee4be80385332a7"), "username" : "amancilla", "password" : "top secret", "lang" : "ES" }
  • 24. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } ¿Cómo hacemos esto en un programa? package com.mongodb.webinar; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; public class Demo { public static void main(String[] args) { MongoClient client = new MongoClient(); MongoDatabase blog = client.getDatabase("blog"); MongoCollection<Document> users = blog.getCollection("users"); Document user = new Document("user", "amancilla") .append("password", "top secret") .append("lang", "ES"); users.insertOne(user); } }
  • 25. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Continuemos con artículos import [+] import static java.util.Arrays.asList; public class Demo { public static void main(String[] args) { MongoClient client = new MongoClient(); MongoDatabase blog = client.getDatabase("blog"); MongoCollection<Document> articulos = blog.getCollection("articles"); String myName = "amancilla"; Document articulo = new Document(”title","My article") .append("author", myName) .append("body", "Lorem ipsum dolor sit amet, […] commodo consequat.") .append("tags", asList("demo","español","MongoDB")); articulos.insertOne(articulo); } }
  • 26. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Creemos un nuevo tipo de artículo public class Demo { static DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'" , Locale.ENGLISH); public static void main(String[] args) { MongoClient client = new MongoClient(); MongoDatabase blog = client.getDatabase("blog"); MongoCollection<Document> articulos = blog.getCollection("articles"); String myName = "amancilla"; Document articulo = new Document(”title","My article") .append("author", myName) .append("body", "Lorem ipsum dolor sit amet […] commodo consequat.") .append("tags", asList("demo", "español", "MongoDB")) .append("postdate", new Date()); articulos.insertOne(articulo); } }
  • 27. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Insertemos muchos artículos public class Demo { static DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'" , Locale.ENGLISH); public static void main(String[] args) { MongoClient client = new MongoClient(); MongoDatabase blog = client.getDatabase("blog"); MongoCollection<Document> articulos = blog.getCollection("articles"); List<Document> list = new ArrayList<Document>(); for (int i=0; i<1000000; i++){ Document articulo = new Document("title”, "Mi artículo " + i) .append("author", "USER_" + Math.round(Math.random()*10000)) .append("body", "Lorem ipsum dolor sit amet, […] ex ea commodo consequat.") .append("tags", asList("demo", "español", "MongoDB")) .append("postdate", new Date()); list.add(articulo); if (i % 5000 == 4999){ articulos.insertMany(list); list.clear(); } } } }
  • 28. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Encuentre un Usuario > db.users.findOne() { "_id" : ObjectId("5742da5bb26a88bc00e941ac"), "username" : "USER_0", "lang" : "EN", "password" : "vTlILbGWLt", "followers" : 448 } > db.users.find( { "username" : "USER_45" } ).pretty() { "_id" : ObjectId("5742da5bb26a88bc00e94206"), "username" : "USER_45", "lang" : "EN", "password" : "GmRLnCeKVp", "followers" : 284 }
  • 29. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Encuentre usuarios con más followers > db.users.find( { "followers" : { $gte : 450 }} ).pretty() { "_id" : ObjectId("5742da5bb26a88bc00e941ae"), "username" : "USER_1", "lang" : "EN", "password" : "bCSKSKvUeb", "followers" : 487 } { "_id" : ObjectId("5742da5bb26a88bc00e941e4"), "username" : "USER_28", "lang" : "EN", "password" : "HAWpiATCBN", "followers" : 473 }
  • 30. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Usando proyección > db.users.find( { "followers" : { $gte : 450 }}, { "_id" : 0, username : 1, followers: 1 } ) { "username" : "USER_1", "followers" : 487 } { "username" : "USER_28", "followers" : 473 } { "username" : "USER_31", "followers" : 493 } { "username" : "USER_48", "followers" : 464 } { "username" : "USER_51", "followers" : 487 } { "username" : "USER_61", "followers" : 493 } { "username" : "USER_106", "followers" : 493 } { "username" : "USER_113", "followers" : 455 } { "username" : "USER_128", "followers" : 460 }
  • 31. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Usando sort > db.users.find({”followers”: {$gte: 450}},{"_id”: 0, username: 1, followers: 1}).sort({”followers”: 1}) { "username" : "USER_1", "followers" : 493 } { "username" : "USER_28", "followers" : 493 } { "username" : "USER_31", "followers" : 487 } { "username" : "USER_48", "followers" : 474} { "username" : "USER_51", "followers" : 473 } { "username" : "USER_61", "followers" : 468 } { "username" : "USER_106", "followers" : 464 } { "username" : "USER_113", "followers" : 461 } { "username" : "USER_128", "followers" : 461 } { "username" : "KKJXBACBVN_134", "followers" : 460 } { "username" : "PTNTIBGAJV_165", "followers" : 458 } { "username" : "PVLCQJIGDY_169", "followers" : 455 }
  • 32. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Actualizar artículo : añadir comentarios 1 > db.articles.find( { "_id" : 19 } ).pretty() { "_id" : 19, "body" : "nTzOofOcnHKkJxpjKAyqTTnKZMFzzkWFeXtBRuEKsctuGBgWIrEBrYdvFI VHJWaXLUTVUXblOZZgUqWu", "postdate" : ISODate("2016-05-23T12:02:46.830Z"), "author" : "USER_19", "title" : "CPMaqHtAdRwLXhlUvsej" } > db.articles.update( { _id : 18 }, { $set : { comments : [] }} ) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
  • 33. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Actualizar artículo : añadir comentarios 2 > db.articles.find( { _id :18 } ).pretty() { "_id" : 18, "body" : "KmwFSIMQGcIsRNTDBFPuclwcVJkoMcrIPwTiSZDYyatoKzeQiKvJkiVSrn dXqrALVIYZxGpaMjucgXUV", "postdate" : ISODate("2016-05-23T16:04:39.497Z"), "author" : "USER_18", "title" : "wTLreIEyPfovEkBhJZZe", "comments" : [ ] } >
  • 34. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Actualizar artículo : añadir comentarios 3 > db.articles.update( { _id : 18 }, { $push : { comments : { username : ”USER_123", comment : "Primer comentario!" }}} ) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.articles.find( { _id :18 } ).pretty() { "_id" : 18, "body" : "KmwFSIMQGcIsRNTDBFPuclJkoMcrIPwTiSZDYyatoKzeQiKvJkiVSrndXqrALVIYZxGpaMjucgXUV", "postdate" : ISODate("2016-05-23T16:04:39.497Z"), "author" : "USER_18", "title" : "wTLreIEyPfovEkBhJZZe", "comments" : [ { "username" : "USER_123", "comment" : ”Primer comentario!" } ] }
  • 35. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Eliminar artículos > db.articles.remove( { "_id" : 25 } ) WriteResult({ "nRemoved" : 1 }) > db.articles.remove( { "_id" : 25 } ) WriteResult({ "nRemoved" : 0 }) > db.articles.remove( { "_id" : { $lte : 5 }} ) WriteResult({ "nRemoved" : 6 }) • Eliminar una colección es más barato que eliminar una colección grande elemento por elemento > db.articles.drop()
  • 36. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Recordemos Usuarios y Artículos > db.users.findOne() { "_id" : ObjectId("57431c07b26a88bf060e10cb"), "username" : "USER_0", "lang" : "EN", "password" : "kGIxPxqKGJ", "followers" : 266 } > db.articles.findOne() { "_id" : 0, "body" : "hvJLnrrfZQurmtjPfUWbMhaQLZjsxHXbUycmJVZTeOZesTnZtojThrebRcUoiYwivjpwG", "postdate" : ISODate("2016-05-23T16:04:39.246Z"), "author" : "USER_0", "title" : "gpNIoPxpfTAxWjzAVoTJ" }
  • 37. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Encuentre un Usuario – explain() > db.users.find( { "username" : "USER_123" } ).explain() { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "blog.users", "indexFilterSet" : false, "parsedQuery" : { "username" : { "$eq" : ”USER_123" } }, "winningPlan" : { "stage" : "COLLSCAN", "filter" : { "username" : { "$eq" : ”USER_123" } }, "direction" : "forward" }, "rejectedPlans" : [ ] } "ok" : 1 }
  • 38. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Encuentre un Usuario – Execution Stats > db.users.find( {"username" : "USER_9999" } ).explain( "executionStats" ).executionStats { "executionSuccess" : true, "nReturned" : 1, "executionTimeMillis" : 433, "totalKeysExamined" : 0, "totalDocsExamined" : 1000000, "executionStages" : { "stage" : "COLLSCAN", "filter" : { "username" : { "$eq" : "USER_999”} }, "nReturned" : 1, "executionTimeMillisEstimate" : 330, "works" : 1000002, "advanced" : 1, "needTime" : 1000000, "needYield" : 0, "saveState" : 7812, "restoreState" : 7812, "isEOF" : 1, "invalidates" : 0, "direction" : "forward", "docsExamined" : 1000000
  • 39. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Etapas de ejecución del plan de consulta • COLLSCAN : para un escaneo de colección • IXSCAN : para un escaneo de índices • FETCH : para recuperar documentos • SHARD_MERGE : para fusionar resultados de shards
  • 40. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Necesitamos un índice > db.users.createIndex( { username : 1 } ) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
  • 41. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Introducción a índices • Tome en cuenta lo siguiente • Background : Cree un índice en background, en lugar de bloquear la base de datos • Unicidad : Todas las claves en la colección deben ser únicas. Las inserciones de claves duplicadas se rechazarán con un error. • Nombre : nombrar explícitamente un índice. De lo contrario, el nombre del índice se genera automáticamente a partir de los campos de índice. • Para eliminar un índice • db.users.dropIndex({ “username” : 1 }) • Obtener todos los índices de una colección • db.users.getIndexes()
  • 42. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Encuentre un Usuario con índices > db.users.find( {"username" : "USER_999”}).explain("executionStats”).executionStats { "executionSuccess" : true, "nReturned" : 1, "executionTimeMillis" : 0, "totalKeysExamined" : 1, "totalDocsExamined" : 1, …
  • 43. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Encuentre un Usuario - FETCH & IXSCAN "executionStages" : { "stage" : "FETCH", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "docsExamined" : 1,, "inputStage" : { "stage" : "IXSCAN", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "keyPattern" : { "username" : 1}, "indexName" : "username_1", "indexVersion" : 1, "direction" : "forward", "indexBounds" : { "username" : [ "["USER_999", "USER_999"]”]}, "keysExamined" : 1, "seenInvalidated" : 0 } } }
  • 44. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Drivers y Frameworks
  • 45. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } En MongoDB 4.0 tendremos transacciones multi-documentos
  • 46. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } ¿Qué hemos aprendido? • Cómo crear una base de datos y una colección • Cómo insertar documentos • Cómo realizar búsquedas • Cómo hacer modificaciones de los documentos existentes • Cómo borrar documentos • Cómo comprobar la eficiencia de una operación • Cómo crear índices • Cómo averiguar los índices que se utilizan en una operación
  • 48. Mi primera aplicación con MongoDB { nombre: “Alejandro Mancilla”, puesto: “Senior Solutions Architect, LATAM”, email: “alejandro.mancilla@mongodb.com”, twitter_id: “@alxmancilla” }