Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mi primera aplicación con MongoDB

Una demostración práctica para construir y escalar una aplicación en Java con MongoDB 3.6, utilizando una aplicación para blogs.


  • Login to see the comments

  • Be the first to like this

Mi primera aplicación con MongoDB

  1. 1. Mi primera aplicación con MongoDB { nombre: “Alejandro Mancilla”, puesto: “Senior Solutions Architect, LATAM”, email: “alejandro.mancilla@mongodb.com”, twitter_id: “@alxmancilla” }
  2. 2. { 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()
  3. 3. { 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
  4. 4. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } El mundo ha cambiado Datos Riesgo Tiempo Costos
  5. 5. { 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
  6. 6. { 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
  7. 7. { 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
  8. 8. { 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”, } }
  9. 9. { 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
  10. 10. { 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
  11. 11. { 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?)
  12. 12. { 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
  13. 13. { 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
  14. 14. { 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
  15. 15. { 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
  16. 16. { 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
  17. 17. { 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") } >
  18. 18. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Object ID 5a98f27946b52ff3efab305c TS------ID----PID-Count-
  19. 19. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Usando Compass
  20. 20. { 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
  21. 21. { 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
  22. 22. { 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" }
  23. 23. { 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); } }
  24. 24. { 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); } }
  25. 25. { 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); } }
  26. 26. { 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(); } } } }
  27. 27. { 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 }
  28. 28. { 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 }
  29. 29. { 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 }
  30. 30. { 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 }
  31. 31. { 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 })
  32. 32. { 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" : [ ] } >
  33. 33. { 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!" } ] }
  34. 34. { 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()
  35. 35. { 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" }
  36. 36. { 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 }
  37. 37. { 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
  38. 38. { 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
  39. 39. { 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 }
  40. 40. { 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()
  41. 41. { 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, …
  42. 42. { 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 } } }
  43. 43. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } Drivers y Frameworks
  44. 44. { webinar: “Mi primera aplicación con MongoDB”, twitter_id: “@alxmancilla”, tags: [“#MongoDB”, ”#DataDayMX”] } En MongoDB 4.0 tendremos transacciones multi-documentos
  45. 45. { 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
  46. 46. ¿Preguntas?
  47. 47. Mi primera aplicación con MongoDB { nombre: “Alejandro Mancilla”, puesto: “Senior Solutions Architect, LATAM”, email: “alejandro.mancilla@mongodb.com”, twitter_id: “@alxmancilla” }

×