Está en la página 1de 51
APRENDE MongoDB NO-SQL MongoDB Tutorial de MongoDB ‘MongoDB es una base de datos de documentos de cédigo abiertoy tuna base de datos NoSQL lider. MongoDB estaescritoen C +.Este ‘tutorial le brindard una gran comprensién de os conceptos de Mon- {goDB necesarios para crear e implementar una base de datos alta- ‘mente escalabley orientada al rendimiento, Audiencia Este tutorial estd diseitado para profesionales de software que estén dispuestos a aprender Ia base de datos MongoDIien pasos sencillos y sencillos. Arrojaré luz sobre los conceptos de MongoDS y, después de completar este tutorial, estard en tn nivel intermedio de experiencia, desde donde podri aleanzar un nivel superior de experiencia, Prerrequisitos Antes de continuar con ese tutorial debe tener un conociméento bsico de a base de datos, el editor de texto a ejecucién de pro- aramas, ete Porgue vamos a desarollar una base de datos de ato rendimiento, por lo que seri eno iene un conocimient dos conceptosbisicos dela bas de datos. (RDBMS) MongoDB: descripcién general sMongoD8es una base de datos multpataforms oientadaadoeu- mentos que proporciona ato rendimiento lta disponibiidady factesealbdad. MongoD8 tabajaen el concep decleciony documento, Base de datos Labase de datos es un contenedor fisico para colecciones. Cada base de datos obtiene su propio conjunto de archivos en el sistema de ar- chivos. Un inico servider MongoDB suele tener varias bases de datos. Coleccién Lacoleccién es un grupo de documentos MongoDB. Es elequivalente ‘una tabla RDBMS. Existe una coleccin dentro de una sola base de datos, Las colecciones no imponen un esquema, Los documentos de una coleceién pueden tener diferentes campos. Porlo general, todos los documentos de una coleccién tienen un propésite similar 0 relacionado. Documento Un documento es un conjunto de pares clave-valor. Los documentos tienen esquema dindmico. Elesquema dindmico significa que los documentos de la misma coleccién no necesitan tener el mismo ean- junto de campos estructura ylos campos comunes en Ios documen- tos de una coleccién pueden contener diferentes tipos de datos, La siguiente tabla muestra larelacién dea terminologia RDBMS con MongoDs, RDBMS MongoDB Rasede datos ate de datos Mess Cotecciin ‘Tupla/ ita ocumente columna campo Uniénde mesa Documentos incrustades (lave primaria Clave principal clave prede- ‘terminada_idproporcionada ppormongodb) (Cliente y srvider debase de datos -Mysald / Oracle mongod ‘mysql saplus ‘mong Documento de muestra EL siguiente ejemplo muestra la estructura del documento de un sitio de blog, que es simplemente un par clave-valor separado por comas. fi i: Objectta(74r78a489020) title MongoD8 Overview’, description: MongoDB is no sql database, by: tutorials point url hetp://www.estorilspoint.com, tags: mongodb, database, 'NoSQL, likes: 100, comments: [| i vusercusert} -message: My first comment, dateCreated: new Date(2011,1,20,215), like: 0 c useruser?’ -message: My second comments, dateCreated: new Date(2011,1,25,7,45), like: aid es un ntimero hexadecimal de 12 bytes que asegura la unicidad ecada documento, Puede proporcionar_id al insertar el decumen- 19, Sino lo prapercions, MongoDB pro ‘iniea para cada documento, - VALORineremental. MongoDB - Ventajas ‘Cualquier base de datos relacional tiene un disefio de esquema tipico ‘que muestra niimero de tablas ylarelacin entre estas tablas Mien- teas que en Mongo ORR CORSEPRO ETRE. Ventajas de MongoDB sobre RDBMS Stn nq: ogee anasede ieee pe ‘que nneoleceidn contiene diferentes doct- -Laestructura de un solo objeto es lara. Sin uniones complejas._ -Capacidad de consulta profunda. MongoDB admite con- sultas dindmicas en documentos mediante un lenguaje de consulta basado en documentos que e@3SiR)SBERSS | -Afinacién. -Facilidad de esealamiento horizontal move mongodb-winé4 mongodd 1 dir(s) moved. car En.caso de que haya extraido MongoDB en una ubicacién diferente, vaya aesa ruta usando el comando ed FOLDER / DIRy ahora jecute el proceso dado anteriormente. ‘MongoDB requiere una carpeta de datos para almacenar sus archi- ‘vos. La ubicacién predeterminada para el directorio de datos de Mon- goDBese:\ data \ db. Porlotanto, debe crear estacarpeta mediante él simbolo del sistema Ejecute la siguiente secuencia de comandos. Cc>md data, c\ma data\ds Sitiene que instalar MongoDBen una ubicacién diferente, debe espe- cificar una ruta alternativa para \ data \ db configurando la ruta db- path en mongod.exe , Para lo mismo, emita ls siguientes comandos. Enel simbolo del sistema, navegue hasta el directorio bin presente en, lacarpeta de instalacién de MongoDB. Supongamos que mi carpetade instalacin es: \ set up \ mongodb CAusersixvzed DAved setup! Da\set upecd mongodb DAset up\mongod>cd bin set up\mongod\bin»mongod exe ~dbpath "d.\set upmongodb \datat Esto mostrar || mensaje de espera de conexiones en la salida dela ‘consola, lo que indica que el proceso mongod.exe se estdejecutando ‘correctamente, Ahora, para ejecutar MongoDB, debe abrir otro simbolo del sistema y «jecutar el siguiente comando, DaAset up\mongedB\bin>monge.exe MongoD8 shell version: 2.4.6 connecting to: test >abstestsave({a:1}) >abawstsfindg {i Objecttd(5879b0F652560654), "2: 1] Esto mostraré que MongoDB est instaladoy se eecutacorrecta- ‘mente. La préxima vez que ejecute MongoDB, deberéemitir solo comandos. Da\set up\mongod\bin-mongod.exe -dbpsth "é\set up\mongodb ‘date’ Diet uphmongodtibin-mongo.exe Instalar MongoDB en Ubuntu Becute siguiente comando para importarla clave GPG piblica de MongoDe: suo apt-kay adv hayserverhkp://keyserverubuntu.com:80—reev ‘TrocERIO Cree un archivo /ete/aptsources lst d/mongodb list usando el sc sgulente comand, echo 'deb ttp:/Mownloads distro mongodb.org/repo/ubuntu-upstart dist 10gen {audo te /etc/ap/rources lis. d/mongodb ist ‘Ahora emita el siguiente omando para actualiare epositoro snado apt get update ‘Acontinuacién instale MongoDB utilizando el siguiente comand: apt getinstal mongodb-10gen «2.23 Enla nstalacin anterior, 2.2.3 es la version MongoDB publicada actualmente, Asegtirese de nstalar siempre a itima versién, Ahora -MongoDB est instalado correcaments Inicie MongoDB sudo service mongodb start Detener MongoDB sudo service mongodb stop Reinicie MongoDB sudo service mongodb restart ara usar MongoDR, ejecut l siguiente comando mongo Estolo conectaré la eecuciin de a instancia de MongoDB Ayuda de MongoDB Para obtener una lista de comandos, escriba db help () en elcliente ‘MongoDB. stole daré una lista de comandos como se muestra en la siguiente capturade pantalla, Estadisticas de MongoDB ara obtener estaistcas sobre a servidor MongoDB, ecriba elo sano QHD ene cliente MongoDD. to SEGRE iathsede dato, el iimero de coletcones los documento en abate RIEUAED. La sala del comando se muestra enlasiguentecaptura de pantalla MongoDB - Modelado de dat Los datos en MongoDB tienen un esquema flexible. Documentos en la misms ealession, Noes mecesario que tengan el mismo conjunto decampos oestructrs, los campos comunes en los documentos de una colecién pueden contener diferentes tipos de datos Algunas consideraciones al disefiar Schema en MongoDB Disefie st esquema de acuerdo con los requisitos del Combine objetos en un documento silos usara juntos. De 19 contrario, separelos (pero asegirese de que no sea necesario uunios). DSpLGUELSEALGE TAROT porque elespacioen diseo es barato en comparacién con el tiempo de eéleulo, Reslice uniones mientras excribe, no enlectura. Optimice su esquema paralos casos de uso mis frecuentes Realice una agregacién comple en el esquema Ejemplo Supongamos que un cliente necesita un diseo de base de datos para sublog /stio web yvelas diferencias entre RDBMS y el disefio dees quemas MongoDB. El sitio web tiene los siguientes requisitos. + Cada publicacion tiene un titulo una descripcién y una URL cada publicacién puede tener una o mas etiquetas. cada publiacién tiene el nombre desueitor y el nimerototal de Me gusta. + Cada publicacién tiene comentarios proporcionados por los usua- ros untocon su nombre, menssje, tiempo dedatosy me gusta Eneada publicacién, puede haber cero o mas comentarios. [Enel esquema RDBMS, el disefio de los requisitos anteriorestendra un, inimo de tres tabla. [Mientras estéen el exquema de MongoDB8, el disefiotendré una publi- cacién de coleccién y a siguiente estructura i id: PosT_1D title-TITLE_OF POST, description: POST DESCRIPTION, by: POST.bY, url: URL_OF POST, ‘tags: [TAGI, TAG2, TAGS}, likes: TOTAL LIKES, comments:| i ‘user:COMMENT.BY’, message: TEXT, ddateCreated: DATETIME, like: LIKES ‘user‘COMMENT_BY', message: TEXT, ateCreated: DATE_TIME, ike: LIKES ) 1 1 Entonees, mientras muestra los datos, en RDBMS debe unir tres tablas yen MongoDB, los datos se mostrarin solo de una colecci6n, ‘MongoDB - Crear base de datos En este capitulo, veremos cémo crear una base de datos en MongoDB, El comando de uso ‘MongoDB use DATABASE_NAME se usa para crear Ia base de datos. EL ‘comando crear una nueva base de datos sino existe; de lo contrari devolvera la base de datos existente, Sintaxis Lasintaxis bisica de a instruccidn use DATABASE es a siguiente: use DATABASE_NAME jemplo ‘Sidesea usar una base de datos con el nombre ,entonces use Iainstruceién DATABASE seria la siguiente: >use mya switched todbmydb Para verificar su base de dates actualmente seleccionada, use el comando db >ab yd Siddesea verificar su lista de bases de datos, use el eomando show dbs >show dbs local 0.781256B test 0.2301268, ‘Suase de datos cteada (mya) no esta presente en la lista, Para mos- trarla base de datos, debe insertar al menos un documento en ella. db movie insert(/'name"“tutorials point’) >show dbs local 0.7812568 ‘mydb 0.2301268 test 0.23012G8 En MongoDB, la base de datos predeterminada es prueba. Sino cred ninguna base de dates, las colecciones se almacenaran en la basede datos de prueba. MongoDB - Eliminar base de datos En este capitulo, veremos cémo soltar una base de datos usando el ‘comando MongeD8, El método dropDatabase () Eleamando MongoD& db.dropDatabase () seuss pars elimi base de datos existente Sintaxis Lasintaxis bésica del comando dropDatabase ()es la siguiente: AbdropDatabased) Esto eliminard la base de dates seleecionada, Sino ha seleceionade ninguna base de datos, se eliminard la base de datos de" prueba" predeterminada. Ejemplo Primero, verifiquela lista de bases de datos dispo mando show dbs >show dbs local 0.781256B mydb 0.23012c8 test 0.23012GB sidesea eliminar la nueva base de datos , el eomando drop- Database () seria el siguiente: suse mydb switched to db mya >db.dropDatabase() ( dropped’ my n ‘Ahora verifique ia lista de bases de datos. >show dbs local 0.781256B test 0.23012GB Eneste capitulo, veremos cémo crear una colecci6n usando Mon- e008, El método createCollection () MongoDB db.createCollection (nombre, opciones) se usa paracrear tuna coleccién. Sintaxis Lasintaxis bisica del comando createCollection (esa siguiente: dbcreateColleetion(name, options) Enel comando, einombre es el nombre dela coleccién que se crea: 1 Opefones es un documento y se utiliza para especifiar la configu. racién delacoleccién, Parimetro Tipo Deseripeién. Nombre Cuerda Nombre dela colecién a crear Opciones Docu. (Opcional)Especiique opciones sobre el ‘tamatiode la memoria ylaindexacion Elparmetro de opciones es opeional, por lo que debe especificar sole elnombredela coleccién. A continuacién se muestra la lista de opcio- nes que puede utilizar: campo Tipo Deseripeién (Opcional ies verdadero, habilta unacoleccién Jimitada, Lacolecciém limitada ena coleceién de tamatiofijo que sobrescribe automdticamente sus entradas mas antiguas cuando aleanza sutamaiio ‘maximo, Siespecifia true, tambien debe especiff- car el pardmetro detamasio. ‘tapad> Boolean (Opeional si es verdadero, crea automiticamente autolo- scoleano un indice eneleampo_id. valor predeterminado Ge esfalso. (Opeional) Especifica un tamafio maximo en bytes ‘Tella nimeso pata tna colecisn limitada Si capped es verd Aero, debe especificar este campo también, (©peional) Especifica el niimero maxima dedocu- max dimer mpentos permitidos en la coleeci6nlimitada Al insertar el documento, MongoDB primero verifica el campo de ta ‘majo de lacoleccién limitada, luego verifca el eampo méximo. Ejemplos de La sintaxis bésica del métado ereateCollection () sin opciones esa siguiente: use test switched to db test f Ke) Puede verifialaccleccin readausandoel comando shaw elle tions >show callections ryatection sterindenss El siguiente ejemplo muestra sintans del métodocreatecolection| (con algunas optiones importantes: SEEMED ot, 16142800,max: 10000}) capped true, autolndexld tru, size En MongoDB, noes necesario crear una coleecién. MongoDB crea una coleceidn automaticamente, cuando inserta algiin documento, SRAAPORENAER (y= “.toralopine) ~Show collections rjcol rrsoletion ‘emindses oriapene MongoDB - Coleccién Drop Eneste capitulo, veremos e6mo eliminar una coleceién usando ‘MongoDB. #1 db.eollection.drop () de MongoDB se usa para eliminar una eolec- cidn de la base de datos. Sintaxis La sintaxis bisica del comando drop Qesla siguiente: COLLECTION NAME.dropQ_ jemplo Primero, verfique las colecciones dispor smydb muse mya switched todbmydb show collections ‘myeol ‘mycolletion system indexes ‘utorialspoint ‘Ahora suelte a coleccién com el nombre mycollection . > myeollection drop) ‘Vuelvaa comprobar a lista de colecciones en Ia base de datos, >show collections ycol system indexes ‘utorialspoint Elmétodo drop ()devolverd verdadero, sila coleccién seleccionada se descarta correctamente, de lo contrario, devolvers falso. MongoD8 admite muchos tipos de datos. Algunos de ellos son... este sl tipo de datos més utiizado para alma- ccenar los datos. La cadena en MongoDB debe ser vilida para UTR. SGREBR este tipo se utiliza para almacenar un valor nu- ‘mérico, El nimero entero puede ser de 32 0 64 bits, depen- iendo de su servidor. (@BGGEAERste tipo se utiliza para almacenar un valor boo- Teano (verdadero /falso). @DBBIB: e522 ipo se flotante. a para almacenar valores de punto -Teelas Min / Max -este tipo se utiliza para comparar un, vvalor con los elementos BSON més bajos y més altos. Matrices :este tipo se utiliza para almacenar matrices 0 listas o valores miltiples en una clave Marca de tiempo : ctimestamp. Esto puede ser itil para _rabar cuando se ha modificado o agregado un documento. (COPIER : este tipo de datos se utiliza para documentos incrustados. RDB : este tipo se utiliza para almacenar un valor nulo. + Simbolo :este tipo de datos se utiliza de manera idéntica a ‘una cadena; sin embargo, generalmente esta reservado para {idiomas que usan un tipo de simbolo especifico. (GERHBste tipo de datos se utiliza para almacenar la fecha ‘whora actual en formato de hora UNIX. Puede especificar st propia fecha y hora creando un objeto de Fecha y pasando aa, mes ao end ADAIR ese tipo de datos se uiliza para almacensr la Del documento, SSREGESRRRRR: ese tipo de datos seuilca para almace- nar datos binarioe BRIG: ext tipo de datos se utiliza para almacenar e6digo JavaScript en el dacumente ERPHTIOATERUTR : este tipo de datos se utiliza para alma- cenar expresiones regulars. MongoDB -GHS6HRRaSCuRTEHED En este capitulo, aprenderemos eémo insertar un documento en la coleccién MongoDB. El método insert () aca insertar datos en Ia coleccisn de MongoDB, debe utilizar el mé- todo insert 0 0 save 0 de MongoD8 Sintaxis La sintaxis bisica del eomando insert (Jes la siguiente: >AbCOLLECTION_NAME.insert(document) Bjemplo >db myeolinsert(| id: Objeetta( 74780489020), title: MongoDB Overview, description: ‘MongoDB is no sql database, bye "tutorials point url http://wwwetutorialspoint.com, tags: mongodb, database, NoSQL, likes: 100 ‘Aqui mycol es el nombre de nuestra coleccién, como se ereéen el capitulo anterior. Sila coleccién no existe en la base de datos, Mon- goDB creard esta coleccién y luego insertara un documento-en ella. Enel documento insertado, sino especificamos el parametro id, MongoDB asigna un Object tinico para este documento. id es un niimero hexadecimal de 12 bytes inico para cada docu- ‘mento de una coleccién. 12 bytes se dividen de a siguiente manera: id: Objectld(4 bytes timestamp, 3 bytes machined, 2 bytes processid, 3 bytes incrementer) Para insertar varios documentos en una sola consulta, puede pasar tuna matriz de documentos en el comando insert 0. Ejemplo db postiinsert(| i tide: MongoDB Overview, description: MongoDB is no sql database, by: tutorials point url http://www.tutorialspoint.com, tags: (mongodb, database, "Nos, likes: 100 title: NoSQL. Database’, description: "NoSQL database doesn't have tables", by: "tutorials point, unk http://wwwetutorials ‘comments: | ‘ user‘usert’, rmessage:'My frst comment’, ddateCreated: new Date(2013,11,10,2,35), Para insertar el documento, también puede utilizar db.post.save (document) Sino especifica id en el documento, el método save (0 funcionard igual que el método insert Q.Siespecifica_id, reempla- 2zarilos datos completos del documento que contiene_id como se es- ppeeifica en el método save 0 MongoDB -@ssumisntemexensult En stecapitulo, aprenderemos cémo consultar documentos dela coleccién MongoDB. El método Gia ara consultar datos deta colecién de MongoDB, debe utilizar el mé- todo find () de MongoDB Sintaxis Lasintans bisica del método find (Jes a siguiente: >abCOLLECTION _NAME.And) El método find ( mostrar todoslos documentos deforma no estructurada, El método pretty () ara mostrar los resultados deforma formateada, puede utilizar el métodopretty 0 sintaxis >db.mycol-find().pretty() Ejemplo >a mycol find pretty) ( Objectid(7aF78ad8902¢), “title: "MongoD3 Overview", "description": MongoDB is no sql database’, “py "tutorials point’, ‘url *hetp://wurwtutorlalspoint com’, “tags ['mongodb’, "database, "NoSQL'I, “llkes:*100" ‘parte del método find 0, existe el método findOne (), que devuelve soloundocumento, Para consultar el documenta sobre a base de alguna candicién, puede utilizar las siguientes operaciones. Operacién ——Sintaxis Bjemplo Equiva- lente a RDBMS Igualdad —(:) __dbmyeolfind por": donde by = “punto de tutoriles'). ‘punto de prety wtorales Menos que (ccave>: ao myeolfind (me donde me valor) gusta:($it So). gusta <50 pretty 0 Menor que (:{$lte; dbsmyeolfind (ime donde me igual valer)) guste: ($ite:50})). gusta<= 50 pretty mas grande. (cclave>:($ gt aomycolfind time dondeme sue ‘svalor}) guste: ($t:50})).gusta> SO prety 0 Mayor que (cclave>(§ ste: ‘dbmycolind (me jet seal sta (Set 90) prety Noesigual (cclae:(ne: dhmmyeslind(('medondeme calor ih usta [Se 50). gumal=50 prety Y en MongoDB Sintaxis En el método find (), si pasa varias claves separdndolas por'enton- ‘ces Monga lo trata como una condicién AND. A continuacién se ‘muestra a sintaxis bésiea de AND - >dbmycol-find( fl Sand: (Gey1: value], fkey2-value2} 1 1 pretty Femplo El siguiente ejemplo mostraré todos os tutoriales escritos por ‘punto de tutorialee’y cuyo titulo es Descripcién general de MongoDB. db mycol find( (and ["by-etutorials point) ttle's"MongoDB Over- view ID pretey0 { "id": Objectia(74°782489026), "title" "MongoDB Overview’, *deseription’s"MongoDB is no sql database’, by" “tutorials pine, “ur "http://www tutorialspoint.com’ “tags: 'mongodb, "database", NoSQL', "ikes"*100" Para el ejemplo anterior, la clausula where equvalenteseré'where by tutorials point ‘AND title= MongoDB Overview ". Puede pasar cualquier niimero de pares de clave valor en lacusula de Disqueda, O en MongoDB Sintaxis Para consultar documentos basadosenlacondicin OR, debe usar $ o palabra clave. A continuacin se muestra sntaxis bsica de OR db myeol find, i Sor: | (key: valet), (key2-value2} 1 } pretty) jemplo Elsiguiente ejemplo mostraré todos los tutoriales esertos por punto de tutoriales'o cuyo titulo es Descripcién general de MongoDB. > mycol ind (Sorby “tutorials point, title" MongoD8 Overvie wD. pretty i “a"sObjecta(74e78ad89020), “ur http. //wwwtutorialspoint com", ~tags':|"mongodb, “database, "NoSQL', “ke':*100" ) Usando AND y OR juntos Bjemplo El siguiente ejemplo mostrard los documentos que tienen gustos superiores a 10 y cuyo titulo es “Descripcién general de MongoDB*o "punto de tutoriles’. SQL equivalente dondela cusula es donde me gusta> 10Y (por ' punto de tutoriales'0 titulo = Descripeién ge- neral de MongoDB')) > db mycolfind(ikes"($gt:10}, $or "by": "tutorials point (title':"MongoDB Overview} pretty) a +a: Objectid(7ar782d89026), “tile "MongoDB Overview", ‘description’: *MongoDS isno sql database’, ‘by’: "tutorials point’, ‘ur "http://www.tutorialspoint.com’, *tags’:-mongodb', “database, "NoSQL", “lkes:"100" , MongoDB - Documento de actualizacién ‘Los métodos update 0 y save () de MongoD8 se utilizan para actua- lizar el documento en tna coleccién. El método update ()actualiza los valores en el documento existente mientras que el método save Q reemplaza el documento existente con el documento pasado en el mé- todo save. Método de @@tializatién de MongoDB () El método update () actualiza los valores en el documento existente, Sintaxis Lasintaxis bisica del método update () esa siguiente: >db COLLECTION_NAME update(SELECTION CRITERIA, UFDATED_ Dara) Bjemplo Considere que la coleecién mycol tiene los siguientes datos, (i objecta(5983548781531adF4Sec5), titles" MongoDB Over- view) (et: Objectid(5983548781331adF45ec6),"ttle"*NoSQL Overview"} (“id Objectid(5983548781331adf45ec7),"ttle"" Tutorials Point (Overview") Elsiguiente ejemplo establecerd el nuevo titulo ‘Nuevo tutorial de ‘MongoDB de los documentos cuyo titulo es Descripeién general de MongoDB' + db. mrycol update (title Mongo Overview") §set(titleyNew Mon- \gos Tutorial) > db,mycol find) (a Objectid(s983548781331dr4Sec5),"ttle"” New MongoDB Tutorial) " -Objectla(59835487813312dF45ec6), " Objectid(59835487813312dF45ec7), Overview") te" NoSQL Overview ide’? Tutorials Point De forma predeterminada, MongoDB actualizari solo un documen- to.Para actualizar varios documentos, debe establecer un parimetro ‘multi en verdadero. >db mycol updata( (title MongoDB Overview) ($set{(titlesNew MongoDB Tutorial} (multitruel) MétodoSave@ de MongoDB Elmétodo save () reemplaza el documento existente con el nuevo documento pasado en el método save () Sintaxis La sintaxis basica del método save () de MongoDB se muestra a continuacisn: >db COLLECTION NAME save({ id ObjectId0,.NEW_DATAI) Bjemplo. El siguiente ejemplo reemplazaré el documento con el id "598354878133 1adfasecs!. db mycolsave( ( *- Objectld( 598354878133 12df4SecS),"title""Tutorials Point New Topic", "by"! Tutorials Point™ 1 ) db mycol find) ("-fa*: Objecttd(598354878133.120f4Sec5),"title""Tutorials Point New] ‘Topi “by Tutorials Point’) ("-la": Objectid(5983548781334a0F4 Secs), "title-"NoSQL Overview") (7: Objectia(598354878133112df45ec7), “title"Tutorials Point overview") MongoDB - Eliminar documento Eneste capitulo, aprenderemos cémo eliminar un documento usando ‘MongoDB, El método cemoven)> Elmétodo remove () de MongoDB se utiliza para eliminar un documento dela coleccién. El método remove )acepta dos pard ‘metros, Unoes el critero de eliminacién y el segundo es solo una bandera, Criterios de eliminacién: se eliminaran los criterios de ‘eliminacién (opcional) de acuerdo con fos documentos. JjustOne :(opcional si se establece en verdadero 0 1,eli- mine solo un documento, sintaxis La sintaxis bésica del método remove ()es la siguiente: >Ab COLLECTION NAME remove(DELLETION_CRITTERIA) Fjemplo Considere que la coleccién mycol tiene los siguientes datos. (id Objectld(5982548781331adf4SecS),"titleY’MongoDB Over- view) "id": Objectta(598354878133 12dF4Sec6),"title™’NoSQL Overview) { "id: Objectld(596354876133:1adf%5ec7), "title'"Tutorials Point Overview") El siguiente ejemplo eliminaré todos los documentos cuyo titulo sea "Descripeién general de MongoDB. >db mycol remove( (ttle MongoD8 Overview)) >db myeolfindd ("id Objectid(598354878133124F45ec6) "id: Objectla(59835487813312d45ee7) (Overview) Quitar solo uno Sihay varios registros y desea eliminar solo el primer registro, esta blezca el pardmetrojustOne en el método remove () >db COLLECTION _NAME remove(DELETION CRITERIA, 1) Sino especifca los criterios de eliminacién, MongoDB eliminaré do- ‘cumentos completos della coleccién. Esto es equivalente al comando foSQL Overview") “Tutorials Point truncar de SOL. db. mycol removei(!) >dbmyeoLfind) MongoDB - PFOVS68i6 n Mongol, laproyeccén signa sleconar sl ls dats nec tarlovenlugh de elsconar todo eda den octane Su Aocumentotiene Scampory necesita mostrar solo3selecronescle 3 deel. El método find () Elmétodo find 0 de MongoDB,,explicado en el documento de consulta de MongoDB, acepta el segundo parémetro opcional que es lalista de campos que desea recuperar, En MongoDB, cuando ejecuta| el método find 0), muestra todos los campos de un documento. Para limitar esto, debe establecer una lista de campos con valor 1.00. $2 usa 1 para mostrar el campo mientras que 0 se usa para ocultar los campos. Sintaxis La sintaxis bisica del método find ()con proyeccién esa siguiente: >dbCOLLECTION_NAME-find((},{KEY:1}) Fjemplo CConsidere lacoleccién mycol tiene los siguientes datos: ("i : Objectid( 598354878133 1adF45ec5),"titles"MongoDB Over view?) ("id Objectd(59835487813312dF45ec6),"title™*NOSQL Overview") fa; Objectid(5983548781331adf45ec7),"title"Tutorials Point Overview") El siguiente ejemplo mostrara el titulo del documento mientras eon- sulta el documento. db mycol find()"title'id.0}) (Ctitle'"mongoB Overview") (title NoSOL Overview") (ritle-Tutorials Point Overview") ‘Tenga en cuenta que el campo_id siempre se muestra al ejecutar el ‘método find 0, si no desea este campo, debe establecerlo como 0. MongoD5 - Kimmitexteregistros a eta capitule,aprenderemoscfnvolinitarregitooe ured MongoD2. El método Limit () Paralimitar los registro en MongoDB, debe wsarelmétodolimit (Et rétode acepta un argumento de tipo numérico, que eel nimero de docatnantosqus dase quae atsen Sintaxis Lasintaxisbsica del método imi (ea sguiente: >ab COLLECTION. NAME find imit(NUMBER) Bjemplo Considere la coleceién myyco tiene los siguientes datos. ia Objecte(598354878193ndf4 Secs), title’ MongaD8 Over view") (a ovjecuats94354878199adf4Sec) "teNoSQL Overview’ (i Opjecta( 594954878199 aSec7 "ite "Tatorias Pint Overview) El siguiente ejemplo mostrard solo dos documentos al consultar el documento. > db. mycolfind((),(itle'id.0} limit(2) (ttle’’MongoDs Overview") (Citle"-NoSQL Overview") Sino specifica el argumento de ntimero en el método limit (), se mostrar todos los documentos de a coleccién, Método MongoDBSKIBID ‘Agar del método limit 0, hay un método mis skip Q que también scepea wi angmnente de too maméricoy seus pra nit mero de docuentor sintaxis La sintaxs sca del método skip (esla siguiente: >hCOLLECTION NAME fn iit(NUMBER) skiggNUNBER) Bjemplo Bl eigalente ejemplo mostrar solo el egunido documento. db mycol find) ttl'=1ia-0) limit) skip(1) [risle’NoSQL Overview ‘Tenga en cuenta que el valor predeterminado en el método skip () es . MongoDB - Ordenar registros neste capitulo, aprenderemos cémo ordenar registros en MongoDB. El métodogorOnD Para ordenar documentos en MongoD8, debe usar el método sort ()-Elmétodo acepta un documento que contiene una lista de campos junto con su orden de clasificacién. Para especificarel orden de clasifi- cacién seutilizan 1y 1.1 se usa para orden ascendente mientras que 1 se usa para orden descendente. Sintaxis La sintaxis bésica del método sort 0 es la siguiente: db COLLECTION. NAME find() sort(KEY-1)) Bjemplo Considere lacoleccién myycol tiene los siguientes datos, ("a objectd( 5983548781 331adf45ees),title-"MongoDB Over: view) (a: Objectid(5983548781331adr45ee6),"title-"NOSQL Overview") ("it Objectid(5983548781331adF85ec7),"titles"Tutorals Point Overview") Elsiguiente ejemplo mostrard los documentos ordenados por titulo cenorden descendente, > db myeolfind\({},"title 1, jd 0)) sort((title-1)) (title Tutorials Point Overview") {Citle:"NoSQL Overview’) ("ttle’*MongoD8 Overview} ‘Tenga en cuenta que sino especifica la preferencia de clasificacién, el método sort () mostrar los documentos en orden ascendente. (G@aORITULE Este andlisis es muy ineficiente y requiere que MongoDB procese un gran volumen ce datos. a Ince amacenael valor den campo espeifioco un conjunto de campos ordenados por el alr de campo come se especiia ene indice. El método asegurarIndex () ara crear un indice, debe usar el méodo OUURRIAPe Mongo feat ‘enando oe nombres de los campos indo eae ony el orden de clasificacién, Lasintaxis bisica del método securelndex ()es la siguiente 0. >db COLLECTION. NAME ensureindex({KEY:1)) ‘creaun indice inico en un campo que puede tener duplicados. MongoD8 indexa solola, ‘Aqu{la clave es el nombre del campo en el que desea erear el indice y primers aparicién de una clave y elimina ‘es para el orden aseendente. Para creat un indice en orden deseen- ropDups ooleano todos los documentos dela coleccién que enh contienen apariciones posteriores de esa clave. Especifique verdadero para crear unin Bjemplo ice nico El valor predeterminado es falso > db mycolensureindex(('title“11) > ‘ies verdadero, el indice solo hace referencia ‘documentos con el campo espacifcado. Es- tos indices uilizen menos espacio pero se escaso Boolean comportan de manera diferente en algunas situaciones (en particular, en os tpos)-EL valor predeterminado es falso ra de opciones ae Especifca un valor en segundos, como TTL iste: expiteAfier ciero paracontrolar cuanto tiempo MongoDBre- = ‘ene los documentos de eta coleccién Descripeién. EIniimero de vesién dl indice. La versién Crea el nice en segundo plano para quel y_ versiinde de indice predeterminada depende dela creacién de un indice no bloquee otras act- indice version de MongoDB que se ejecta al crear el antecedentes Booleano vidades dela base de datos. Especifique ver. indice dadero para compilaren segundo plano. Et valor predeterminado es falso. E1pesoes un nimero que vade 1 299,999 y docs denota i importancia del campo enrelacicn Crea un indice knieo para quel colecelén Pesos mento _ con los otros campos indexados en términos ro acepte la neercisn de documentos dande depuntuacién. ‘ ooteano #*1¥* denice olasclavescoincden con “inico_Booleano un valor existente en el indice. Especifique Para un indice de extol dloma que deter verdadero para crear un indice inico.Elvalor ——_igiomaprede- ‘minala lista de palabras vacas las reglas predeterminadoesfalso ‘termindo UT! para ellematizador ye tokenizador. El valor Dredeterminado es inglés nombre uerda_Elnombre de indice. Sino se especifca, _MongoDB genera un nombre e indice conca ara un indice de texto, especifiqueel nom- Dre del campo en el documento que contiene lidioma para reemplazar el idioma prede- terminado. El valor predeterminadoes el idioma MongoDB - AgPeRaCIOTED Las operaciones de agregaciones procesan registros de datos y devuel- ven resultados calulados. Las operaciones de agregacién agrupan valores de varios documentos y pueden realizar una variedad de ‘operaciones enlos datos agrupados para devalver un nico reulta- 40. En SQL-count(")y con group by es un equivalentede agregacién mongodb, El método aggregate () Para la agregacién en MongoDB, debe usar el método aggregate. Sintaxis La sintaxis basiea del método aggregate Q esa siguiente: >db.COLLECTION NAME aggregate(AGGREGATE_OPERATION) Bjemplo Enla colecci tienes los siguientes dato: i a Objecttd(rarr8ads9020) title MongoDB Overview’, dlsmycolaggregste((Sgroup id: "Sb. user, mum_tutori Dy ( “results| (sum tutorials point’, “num tutorial" =2 id" :"Neoay’, ‘mum tutorial: 1 La consulta equivalente de $Ql. para el easo de uso anterior se selec- + At disponiiiad de atos(24°7) + Recuperacn de desist SALLE POAEAEATAI (om copas de egirad reconstriccines deinles compaction) esa de cura (copisaiconales par er) + Blconjunt derpias es transparent para lepine Cémo funciona la replicacién en MongoDB MongoD logralarepicacén mediante elusode un conjunto (GHB. un conjunto de replicas es un grupo de insta ue “albergan el mismo conjunto de datos. En una réplica, un nodoes el -nodo principal que recibe todas las operaciones de escritura. Todas las -demés instancias, como las secundarias, aplican operaciones desde | _ Primaria para que tengan el mismo conjunto dedatos.El conjunto de _éplicas solo puede tener un nodo principal. +Elconjunto de réplicas es un grupo de dos omés nodos (ge- neralmente se require fininoBE HERE) -Enun conjunto de rpc "Toe nodos restates son secundarios. -Bn el momento dela conmutacién por error automitica 1 mantenimien‘ (GSES DEINE _arioy eelige un nuevo nodo primario. Semuestra un diagrama tipico de eplicacién de MongoDB en el quela aplicacién cliente siempre interactia con el nado principal y el nodo Funciones @ + Un grupo dibs: + Cualquiernodo puede ser primario - Recuperacién automitica + Fleccién por consenso de primarias Configurar un conjunto de réplicas En estetutora, convertiremos un instancla independ de MongoD8 en un conjunto de eplicas ara converts aun conunto de replicas los siguientes son ls pases -apague yaecutandoelservidor MongoD8 -Inicie el servider MongoDB especificando la opcién - replset. A continuacién se muestra la sintaxis bisica de — replset- ‘mongod ~port "PORT" ~dbpath "YOUR_DB_DATA_PATH" ~replset "REPLICA SET _INSTANCE NAME" Ejemplo ‘mongod port 27017 -dbpath *D:\set up\mongodb data’ -replset x50 -Comenzaré una instancia de mongod con elnombre rs0,en el puerto 27017. Ahora inicie el simbolo del sistema y conéctese a esta ins- tancia de mongod. -Enelcliente de Mongo, emita elcomando rs.initiate() para {nlefar un nuevo conjunto de réplicas. «Para verificar la configuracién del conjunto de réplicas, ejecute el comando rs.conf (). Para comprobar el estado del conjunto de réplicas, ejecute el comando rs.status () Agregar miembros al conjunto de réplicas Para agregar miembros al conjunto de réplicas,inici instancias: ‘mongod en varias maquinas. Ahora inicie un cliente mongo y emita ‘uncomandas.add 0. — La sintaxis bésica del comando rs.add ()es!a siguiente: >a add(HOST_NAMEPORT) Fjemplo Supongs que el nombre desu instaneia de mongod es mongodi.net y seest ejecutando encel puerto 27017. Para agregar esta nstanca alconjunto de eépicas efeeute el comando r.add()en el cliente Mongo. >rs.add(mongodi.net.27017) Puede agregar una instancia de mongod al conjunto de rélieas colo ‘cuando estéconectado al odo principal. Para verfcar ses conee- ado dbisMaster Qen el cliente (GABREERSEEEEB.. 4 medida que aumenta el tamafio de los datos, es posible que uns sola méquina no sea suficiente para alma- cenar los datos ni proporcionar un rendimiento de lectura y escritura, ceptable, La fragmentacién resuelve el problema de la escala hori- (Con la fragmentacién, agrega mas maquinas p Porque sarang SE © Ente repiain toda leew vanal nado maestro + Lasconsultassensibles ala latencia atin van a master + Elconjunto de répicas nico tiene una limitacion de 12 nados Lamemoria no puede serlo sufcientemente grande cuando el conjuntode datos active es grande + Eldiscolocal nes lo suficientemente grande Elescalado vertical es dematiado caro El siguiente diagrama muestra a fragmentacién en MidngoDB me~ iante un elister fragmentado, or more Routers Sena foreracg nats ear Enel siguiente diagrama, hay tres componentes principales: -Fragmentos :1os fragmentos se utilizan para almacenar datos, Proporcionan alta disponibilidad y consistencia de datos, Enel entorno de produccién, cada fragmento es un conjuntode réplicas independiente. -Servidores de configuracién: los servidores de configura- cién almacenan los metadatos del chister. Estos datos con- tienen una asignacién del conjunto de datos del chister alos fragmentos. Elenrutador de consultas usa estos metadatos para orientar operaciones a fragmentos especificos. Enel entorno de produccién, los cisteres fragmentados tienen exactamente 3 servidores de configuracién Enrutadores de consultas: los enrutadores de consultas son basicamente instancias de mongo, interactian con las aplicaciones cliente y dirigen las operaciones al fragmento apropiado, El enrutador de consultas procesa y dizige las operaciones a fragmentos y luego devuelve os resultados a los clientes. Un clisterfragmentado puede contener mas de tun enrutador de consultas para dividir la carga de solicitu- dos del cliente, Un cliente envia solicitudes a un enrutador de consultas. Generalmente, un ckisterfragmentado tiene ‘muchos enrutadores de consulta. MongoD8 - GFSaReOpIaUeSepurIaaa En este capitulo, veremos cémo crear una copia de seguridad en ‘MongoDB. Volcar datos de MongoDB Para crear una copia de seguridad dela ase de datos en MongoDB, debe usar el comandmongorestore MongoDB - Implementacién Cuando esté preparando una implementacién de MongoDB, debe {ntentar comprender cémo su aplicacién se mantendré en produc: cidn, Es una buena idea desarrollar un enfoque coherente y repetible para administrar su entorno de implementacién para que peda mi nimizar las sorpresas una vez que esté en produccién. El mejor enfoque incorpora ia creacién de prototipos de su configu: racidn, a zealizacion de pruebas de carga, el monitoreo de métricas clavey el uso de esa informacién para scalar suconfiguracin. La parte clave del enfoque es monitorarproactivamente todos sis tema; ext lo ayudardacomprender cbmo se mantendré su sistema de produccion antes dela implementacicn y determinar dénde de- ben agragar cepucided, Tener una idea de os postbles pcos en el uso dela memoria, por ejemplo, podria ayudar aapagarun incenio de bloqueo de escritura antes de que comience (SORA SUUAALERERES,tongoD2 proporciona algunos de los siguientes comand mongostato Este comando verifiea Westado de todas las instancias de mongod en sjecucion y devuelveloscontadores de las operaciones de la base de danas. Estee contadoresinctuyen inereiones,consalas, seruaisacio nes, eliminacione ycursores. I comando también muestra cuando esta aleanzando falls de pigina y muestra su porcentaede blo ‘queo Esto significa qu se est quedando sin memoria, est agotando Incapacidad de escritura tiene agin problema de rendimiente. Para gjecutar el comando, nici su instancia de mongod. En otro simibolo del sistema, vaya al directorio bin de su instalacién de mon- sodby excita mongostat set wp\mongpebinemongostat {Acontimuacisn se muestra la salida del eomando: Este comando rastrea.e informa la actividad delectura y eseritura dela instancia de MongoD8 por coleccién. De forma predetermina- da, mongotop devuelve informacién en cada segundo, que puede cambiar en consecuencia. Debe verificar que esta actividad de lectura y escritura coincida com la intencién de su aplicacién, y queno.esté enviando demasiadas escrituras ala base de datos ala vez, leyendo con demasiada frecuencia desde un disco 0 superando el tamariode su conjunto de trabajo. Para ejecutar el comanda, inicie su instancia de mongod. En otra simbolo del sistema, vaya al directorio bin de su instalaci6n de mon- godb y escriba mongotop. DAset up\mongodb\bin>mongotop A continuacién se muestra la salida del comando: ‘Para cambiar el comando mongotop para devolver informacién con ‘menos frecuencia, especifique un niimero especifico después del co ‘mando mongotop. DaAset up\mongodb\bin-mongotop 30 El ejemplo anterior devolveré valores cada 30 segundos. ‘Ademés de las herramientas de MongoDB, 10gen proporciona un ser vicio de monitoreo alojado gratuito, MongoDB Management Service or métricas de todo su chister, 5), que proporciona un panel de control y le brinda una vista de MongoDB - Java En ste capitulo, aprenderemos cémo configurar ef €ontrolador JDBC de MongoDB, ‘Antes de comenzar a usar MongoDB en sus programas Java, debe ase gurarse de tener el controlador JDBC de MongoDB y Java configurado fenlaméquina, Puede consultar el tutorial de Java parala instalacién de Java en su méquina. Ahora, veamos cémo configurarel control dor JDBC de MongoDB. Debe descargar el jar desde a ruta Descargar mongo ar Asegtirese de descargar la ltima versién. [Necesitaincluir el mongojaren su classpath, Conectarse a la base de datos Para conectar la base de datos, debe especificar el nombrede a base edatos, sila base de datos no existe, MongoDB la crea automitica- mente. A continuacién se muestra el fragmento de cédigo para conectarsea la base de datos: Import com mongodb client MongoDatabase; import com mongodb MongoClient; import com mongodb MongoCredential; public class Connect ToDB { ‘public state vod main\ string arg) 1 Creating Mongo client MongoClient mongo = new MongoClient( localhost", 27017); 1) Cresting Credentials MongoCredential credential; ‘credential = MongoCredential cresteCredential(sampleUser’, “myDe", “password tocharaeray() System out printin(*Connected to the database successfully"); 1 necessing the database ‘MongoDatabase database ~ mongo.getDatabase("myDb"), System out printin(*Credentials "+ credentiaD); 1 1 Ahora, compilemos y ejecutemos el programa anterior para crear nuestra base de datos myDb como se muestra a continuacién, $javac ConnectToDBjava $java ConnectToDB Alejecutarse, el programa anterior le dala siguiente salida, Connected to the database successfully Credentials :MongoCredential{ ‘mechanism = null, userName ='sampleUser, source ='myDb, password = , ‘mechanismProperties = ) } Crear una coleccién Para crear una coleccin, se utiliza el método ereateCollection () dela clase com.mongodb client. MongoDatabase ‘Acontinuacién se muestra el fragmento de cédigo para crear una coleccién: ‘import com mongodb client MongoDatabase; {import com mongodb.MongoClient; ‘import com mongodb MongoCredentia ‘public elass CreatingCollection { public static vod main(String args) 1/ Creating a Mongo client ‘MongeClient mango = new MongoClient( “localhost”, 27017 ) 1/ Creating Credentials MongeCredential credential; credential» MongoCredential createCredential(‘sempleUse "myDb', "password tochararray(); ‘ystem.out printin(‘Connected to the database successfully"); ‘/fhecessing the database ‘MongoDatabase database = ‘mongo getDatabase(*myDb"); /1eeeatinga collection database createCollection(‘samplecollectlon’); ‘System out printin( Collection crested successfully’); } ‘Alcompilar, el programa anterior le da el siguiente resultado: Connected tothe database successfully Collection created successfully Obtener / seleccionar una coleccién Para obtener / seleccionar una coleccién dela base de datos, se usa el _método getCollection () dela clase com.mongodb client. MongoDa- tabase ‘A continuacién se muestra el programa para obtener / seleccionar ‘una coleccién: {import com mongodb client MongoCallection; ‘import com mongod client MongoDatabase; {import org bson Document; ‘import com.mongod.MongoClient; import com mongodb MongoCredential; ‘public class selectingCollection{ public static void main(String args) [ 11 Creating a Mongo client ‘MongeClient mongo = new MongoClient "localhost", 27017); 11 Creating Credentials ‘MongoCredential credential; credential - MongoCredentialcreateCredential’sampleUser', “myDb’, ssword'tocharAreay(); ‘System out printin( "Connected to the database successfully”; 17 Accessing the database ‘MongoDatabase database = mongo.getDatabase(‘myDb"; 1/ Creating aollection ‘System out printin(‘Cllection crested successfull’), 1/Rtievinga collection -MongoCollection- Document» collection ~ database getCollectio- ‘ntmyCollection; System.out printn( ‘Collection my Collection selected success- fully: ) 1 ‘Alcompilay, el programa anterior le dael siguiente resultado: Connected to the database successfully Collection created succesfully Gallection myColetion selected successfully Insertar un documento Parainsertar un documento en MongoDB, se usa elmétodo insert {de aclase com.mongodb client.MongoCollection ‘Acontinuacién se muestra el fragmento de cSdigo para insertartn document {import com mongodb client MongoCellection; {import com mongodb client MongoDatabase; {import org bson. Document; {import com mongodb.MongoClient; {import com mongodb Mongocredental; ‘public class InsertingDocument ‘public static vold main String args) { 11 Creating a Mongo client ‘MongoClient mongo = new MongoClient( "localhost", 27017 ) 11 Creating Credentials MongoCredential credential; credential = MongoCredentisl createCredential(ssmpletser, yi, “password toChararray(); ‘System.out printin('Connected tothe database successfully); 11 Accessing the database _MongoDatabase database = monga getDatabase('my0"); // Retrieving acollection ‘MongoCollection-Document> collection = database getCollectio- ‘n¢sampleColection’y; ‘ystem.out printin( ‘Collection sampleCollection selected success- fully); Document document = new Document("itle’ "MongoD8") sappend( i, 1) aappend( ‘description’, ‘database") ‘append( kes", 100) append( url, “http.//wwu:tutorialspoint.com/mongodb/") append("by’, "tutorials point); collection insertOne(document); ‘System.out printin("Document inserted successfully"; ) o Al compilay, el programa anterior ledael siguiente resultado: Connected to the database successfully Collection sampleCollection selected successfully Documentinsertd successilly Recuperar todos los documentos para selecionartodeslos documentos del ecleecién, se uiliza lméted find dela case com:mongodt client Mongocolletio- 2. Estemétoda devueleeun euros, porloque debe err ete curse. ‘Acontinuacén se muestra el programa pra seleccionar toes Ios documentos: import cam mongodb client Fndeabe Import com mongnd client Mongocolletion; Import commengadcent MongeDatsbve lanpoctjrastivertce; apr ng bom Docent import com monged MongoClen; import com mongadb MongCredental pubic ass RetrevingalDocument{ publi stati void main( tring args) 11 Creating a Mongo cient MongeClient mongo = new MongoClient"localhost*, 27017 } 1/ Creating Credentials “MongoCredential credential; credential - MongoCredentialcreateCredential(sampletse", “myDb’ “password” tochararray0); System.out.printin(‘Connected to the database successfully", (1 Accessing the database “MongoDatabase database ~ mongo.getDatabase(‘myDb"), (1 Retrieving a collection ‘MongeCollectionDocument> collection = database getCollectio- "sampleCollection’); ‘System.out printin(‘Colletion sampleCollection selected success- fully’); 1/Gettingtheiterable object Finditerable iterDoe = collection find); int 1/ Getting the iterator erator it iterDociterator(); ‘hile (it hasNext0) System.out printin(it next); , } 1 Al compilar, el programa anterior le da el siguiente resultado: Document{{ “id = $967745223993a3264Gbaab8, title - MongoDB, id= 1, description = database, likes = 109, url= htep://wwwtutorialspoint.com/mongodby/, by = tutorials point W Document{{ “id = 7452239959673a32646baab8, url= http://wwwtutorialspeint com/rethinkdby, by = tutorials point n Actualizar documento Para actualizar un documento dela coleceién, se usa el método upda- ‘teOne () de a clase com.mongodb client MongoCollection. Acontinuacién se muestra el programa para seleecionar el primer documento: {import com mongodb.client Findlterable; {import com mongodb client MongoCollection; ‘import com mongodb client. MongoDatabase; ‘import com mongodb client model Filters; ‘import com mongodb client. model Updates; {import java.util terator; {import org bson. Document; {import com mongodb.Mongoclient; ‘import com mongodb,MongoCredential; public less UpdatingDocuments[ public static void main String arg!) 1/ Creating a Mongo client ‘MongoClient mongo = new MongoClient "localhost", 27017 1/ Creating Credentials ‘MongoCredential credential; credential - MongoCredentialcreateCredential(sampleUser’, *myDb' “password!toChararray(); system out printin("Connected tothe database successfully?) 1/ Recessing the database ‘MongoDatabase database - mongo,getDatabase(‘myDb", 41/ Retrieving collection ‘MongoCollection collection = database getCollectio- ‘(samplecollection’), System out printin( ‘Collection myCollection selected success fully, collection updateOne(Filters0q(%, 1), Updates.setlikes’, 150); System.out printin(-Document update successfully." (1 Retrieving the documents after updation 11 Getting the iterable object Findlterable iterDoc = collection fina); int /1 Getting the iterator Iteratarit = iterDoc terator(); while ithasNext0) System out printin(t next0); 1 1 Alcompilar, el programa anterior le da el siguiente resultado: Document update successfully. Document {{ 5967745223993a32646baab8, title= Mongoos, id=1, description Likes = 150, url= http//wwwtutorialspoint com/mongodby, by = tutorials point a Eliminar un documento Para eliminar un documento de lacoleccién, debe utilizar el método deleteOne () dela clase com.mongodb client: MongoCollection latabase, ‘Acontinuacién se muestra el programa para eliminar un documento: {import com mongodb client Finditerable; {import com mongodb client MongoCellection; {import com mongodb.client MongoDatabase; {impart com mangodbclient model Filters {import java.util. Iterator; import orgbson Document; {import com mongedb MongoClient; {import com mongodb MongoCredentil; Public class DeletingDocuments ( ‘public static void main< string args) 11 Creating a Mongo client ‘MongoClient mongo = new MongoClient"Iocalhost*, 27017 } // Creating Credentials ‘MongoCredential credential; credential - MongoCredentislcreateCredential(sampleUser', icy “password! toChararray(); ‘System out printin("Connected tothe database successfully"); 1/ Accessing the database ‘MongoDatabase database ~ mongo getDatabase(‘myDb // Retrieving a collection ‘MongoCollectionDocument> collection ~ database getCollectio- ‘n(sampleCollection’); ‘ystem.out printin(‘Colletion sampleCollection selected success- fully; // Deleting the documents collection deleteOne(Filtersq(‘d" 1); ‘system.outprintin("Document deleted successfully. // Retrieving the documents after updation 11 Getting the iterable object Findlterable«Document> iterDoe = collection find); inti 1; 11 Getting the iterator IReratarit = iterDoc iterator); wile asext0)( System out pent inserted Document); Symemout pint ner: 1 1 1 ‘Alcompilr el programa anterior eda] siguiente resultado Connected to the database successfully Cailection enmplecolection elected scestully Document deed succes. Dejar caer una coleccién ara liminar una oleccién de una base de datos, debe utilizar el mé- todo drop Q dela clase com mongodb client. Mongocollection ‘A continuacién se muestra el programa para eliminarunacelecién: import com mongodb tient MongoCallection, Import com nengodcllent MongoDersbese import orgbson.Document; import com.mengodb.MongoClient; import com mongodb MongoCredential; public class DropingCollection { ‘public static void main( string args()){ 17 Creating a Mongo client MongoClient mongo = new MongoClient“localhost’, 27017 1/ Creating Credentials MongoCredential credential credential - MongoCzedentil.createCredential'sampleUser “yD, “password? tochararray); System out printin(‘Connected tothe database successfully"); 1) Accessing the database ‘MongoDatabase database ~ monge.getDatabase('myDB"); 1/ Creating a collection System.out printin(‘Collections created successfully"); 17 Retieving acollection ‘MongoCollection Document» collection = databace getCollectio. ‘A('sampleCollection”) 1/ Dropping a Collection collection drep0); System out printin( ‘Collection dropped successfully"); 1 1 ‘Al compilas, el programa anterior le da el siguiente resultado: Connected tothe database successfully Collection sampleCollection selected successfully Collection dropped successfully Listado de todas las colecciones ara enumerar todas las colecciones en una base de datas, debe usar el método listColleetionNames () de a clase eom.mon- godb.client MongoDatabase A contimuacién se muestra el programa para enumerar todas as co- lecciones de una base de datos: import com mongodb client MongoDatabase;, import commongodb MongoClient; import commongod MongoCredential; [public class ListofCollection { public static void main( string args!) { 11 Creating a Mongo client ‘MongoClient mongo = new MongoClient "localhost", 27017 } 11 Creating Credentials MongoCredential credential; credential » MongoCredentialcreateCredential(sampleUser, myDb", “password tocharArray(); System.out.printin(‘Connected to the database successfully"; (7 Accessing the databace -MongoDatabase database » mongo getDatabase'imyDb'); System.out printin(‘Collection created successfully") for (String name : database listCollectionNames() | System.out printin(name); ) 1 H ‘Al compilar, el programa anterior led el siguiente resultado: ‘connected tothe database successfully Collection created successfully ‘myCollection ‘mycollection1 myCollectionS ‘Los métodos restantes de MongoDB save ), limit 0, skip 0, sort (0, etc. funcionan igual que se explica en el tutorial siguiente. MongoDB - PHP Para usar MongoD8 con PHP, debe usar el controlador HAP de Mh- .0DB. Descargue el controlador desde la URL Descargar controlador PHI. Asegrirese de descargarlailtima versién. Ahora descomprima elarchivo ycoloque php_mongo.dilen su directorio deextensién PHP ext" por defecto) y agregue la siguiente linea asu archivo php int - extension = shp_mongodll Realizar una conexién y seleccionar una base de datos Para realizar una conexién, debe especificar el nombre de a base de datos, sila base de datos no existe, MongoDB a rea automética- ‘Acontinuacién se muestra el fragmento de cédigo para conectarsea labase de datos: php 1/ connect to mongodb $m-= new MongoClient(); ‘echo "Connection to database successfully” Uf select a database Sdb = $m-omydb; echo ‘Database myab selected’ Cuando se ejecuta el programa, producir el siguiente resultado: ‘Connection to databace successfully Database myc selected Crear una coleccion A continuacisn se muestra el fragmento de eédigo para crear una coleceisn: mydb; echo "Database mya selected" {eollection = $db->createCollection(*mycol"; echo Collection created sucesessfully (Cuando se ejecuta el programa, produciré el siguiente resultado: Connection to database successfully Database mya selected Collection created sucesessfully Insertar un documento Para insertar un documento en MongoDB, se usa el método insert (). ‘Acontinuacién se muestra el fragmento de c6digo para nsertar un documento: ‘mydb; echo "Database mye selected’ echo Collection selected sucesessfully'; ‘$document = array( itl’ => “MongoDB" ‘description’ => “database” > 100, “http://wwvetutorialspoint.com/mongodb/ tutorials point” ) $collection->insert($document); echo "Document inserted successfully" ‘Cuando se ejecuta el programa, produciré el siguiente resultado: Connection to database successfully Database mydb selected Collection selected succsessfully Document inserted successfully Buscar todos los documentos Para seleccionar todos los documentos de la coleccién, se utiliza el ‘método find 0, ‘Acontinuacién se muestra el fragmento de cédigo para seleccionar todos los documentos: “find); (iterate cursor to display title of documents foreach (Seursor as ¢document) { echo $document!'title')."\n", 1 ‘Cuando se ejecuta el programa, produciré el siguiente resultado: Connection to database successfully Database mydb selected Collection selected succsessfully( “title's "MongoDB* : Actualizar un documento Para actualizar un documento, debe utilizar el método update (. Enel siguiente ejemplo, actualizaremos el titulo del documento inser tado a MongoDB Tutorial. A continuacisn se muestra el fragmento decédigo para actualizar un documento: mydb; echo "Database mdb selected’, Scolleetion = $ab->mycol; echo’Collection selected succsessfully" J now update the document $collection->update(arrayitle'=>"MongoDB"), array( $set'=>arraytitle=>"MongoDB Tutorial); echo Document updated successfully; 7/ now display the updated document ‘Scursor = $collection->fina); (iterate cursor to display ttl of documents echo "Updated document’ foreach (Seursor as $document){ echo $document|title]."\n 1 ‘Cuando se eecuta el programa, produciré el siguiente resultado: ‘connection to database successfully Database mydb selected Collection selected succsessfully Document updated successful Updated document { “tile MongoDB Tutorial" ) Eliminar un documento Para climinar un documento, debe utilizar el método remove Enel siguiente ejemplo, eliminaremos los documentos que tienen eltitulo Tutorial de MongoDB . A continuacién se muestra el frag- ‘mento de c6digo para eliminar un documento: php ZF connectto mongod ‘$m_=new MongoClient0; echo Connection ta database successfully 7 selecta database db ~ §m->myab; echo Database myib selected’; collection = $b->myeol; echo Collection selected sucesessflly’s 17 now remove the document {oullection->removelaray(tithe’=>"MonguDB Tutocial" flee); echo “Documents deleted successfully 1/ now display the available documents Seursor = §eollection->find); //iverate cursor to display title of documents echo "Updated document’; foreach (Scursor as fdocument) | echo $document ttle") ."\n"; 1 Cuando se ejecuta el programa, produciré el siguiente resultado Connection to database successfully Database mya selected Collection selected succsessfully Documents deleted successfully Enel ejemplo anterior, el segundo parémetro es de ipo booleano y se ‘usa para al campo justOne del método remove () Los métodas restantes de MongoDB findOne (), save (, limit 0, skip 0, sort (ete. funcionan igual que se explicé anteriormente. SRORBODEUReCIONES _ Las relaciones en MongoDB8 representan cémo varios documentos se (GEIAcionaNSGieaMENKeeNAWRD Las relaciones se pueden modelar ‘mediante enfoques inerustados y referenciados Fstas relaciones pueden sor MEN ELON Consideremos el caso de almacenar ditecciones para usuarios. Por lo tanto, un usuario puede tener varias direcciones, lo que hace que esta sea una relacin 1:N, A continuacién se muestra la estructura del documento de muestra del documento d@ a0: ( "jar objectiat's2ffe33ed85242F436000001"), “name “Tom Hanke’ omtact™ "987654221", “dob"01-01-1991" ’ A continuacin se muestra la estructura del documento de muestra del documento de direceién: c jd";Objectd(S2ffe4a5d85242602e000000"), "building™"22 A, Indiana Apr *pincode': 123456, ‘ity*s"Los Angeles ‘state’ "Calforn 1 -Modelado de relaciones incrustadas~ Enelenfoque integraco, (@GRISaetnos Hl MGeunIenEOMECRCEOD ‘dentro del documento del usuario Objectla'52FF35e485242F436000001"), ‘contact':"987654321°, "dob"01-01-1991", same" "Tom Benzamin’ “building’:"22 A, Indiana Apt’, *pincode’: 123456, “city's "Los angeles’ “seater "Californist “building’:"170 A, Acropolis Apt’ *pincode’: 456788, “city's “Chicago' i lo Eldo- ‘cumento completo se puede recuperar en una sola consulta, come: ‘Tenga en cuenta que en la consulta anterior, dbyy users son la base de datos y la coleceién, respectivamente, Elinconveniente es que si el documento incrustado sigue creciendo demasiado de tamaiio, puede afectar el rendimiento de lectura / eseritura, Este es el enfoque para disefiar Eneste cenfoque, tanto los documentos de usuario como los de direccién s= _mantendran por separado, pero.el documento de usuario contendré_ eT ami “contact":"987654321", “dob’: "01-01-1991", ‘name’: "Tom Benzamin’, Como se muestra atziba, el documento de usuario contiene el campo de matriz address_ids que contiene Objectids de las direcciones correspondientes. Con estos Objectids, podemos consultar los docu- ‘mentas de direccién y obtener detalles dela direccisn desde alli.Con este enfoque, necesitaremos dos consultas: primero para obtener los campos address_ids del documento del usuario y, en segundo lugar, para obtener estas direcciones de lacoleecién de direeciones FR ST TT SSE. ee ee MongoDB: referencias de bases de datos Como se vio enelikimo capitulo de as relacions MongoD, para implementa unaestructa de base de datos normalzaa et Mon- 00D usamos el concepto de Relaciones teferencladas, ambien ria orc nie aa alan sm tmanualment a identfeacin del documento referencads dentro dete docunent, sin mbar noe aos en que un documeto ones podem usar Mon ‘datos donde estamos almacenando diferentes tipos de dizecciones (hogar, oficina, correo, etc) en diferentes colecciones (address. home, address_office, ad- dress_mailing, etc). Ahora, cuando el documento de una coleccién de usuario hace referencia a una direccién, también debe especificar qué coleccién buscar en funcién del tipo de direccién. En tales escena- los donde un documento hace referencia a documentos de muchas coleeciones, deberiamos usar DBRefe ay SERED en Daefs (FR. este campo especitica ESTER de documento referenciado FO CR pefca ARRATNARLETSATT de referencia (BABBeste es un campSBPAOHAly contiene elfTMBREME: Mapai vest cnet cl cocumene etre: Considere un documenta de usuario de muestra con una direceién {de campo DBRef como se muestra en el fragmento de cédigo: 4d/Objecttd("534025974852426020000002"), “address ”, "contact: "987658321", ’ Elcampo de direccién DBRef aqui especifica que el documento de direccin referenciado se encuentra en la coleccién address_ho- ‘me en a base de datos tutorialspoint y tiene una identificacién de 534009e4d852427820000002. El siguiente cédigo busca dinémicamenteen la coleccién especificada porel parimetro $ ref (address home en nuestro caso) un docu- ‘mento con id como lo especifica el pardmetro $id en DBRef. >var user = dbsusersfindOne('name"Tom Benzamin") var dbRef = user address > dblabRef ref findOne(("id"(abRef $id) Eleédigo anterior devuelve el siguiente documento de direccién pre. sente en la coleccién address. home: G “i :Objectld('534009e4<852427820000002"), building” :*22 A, Indiana ape’, *pincode": 123456, "city": "Los Angeles “state” "California" a 1 pV: MongoDB - Consultas cubiertas neste capitulo, aprenderemos acerca de as consultas cubiertas 2Qué es una GSHSHIEERLIEEEADD Segiin a documentacién oficial de MongoD8, una consulta cubierta es una consultaen aque: ~ Tooslos ampos dea consulta forman parte dein nie, | Todoslos campos devueltos en Ia consulta estan en.el micr:c = Dado que todos ls campos presentes ena consulta son partede ‘sn incice, MongoDB coincide con las condiciones de laconsultay _devuelve el resultado utilizando el mismo indice sin mirardentro do (GRRREERERERD ado que los indices estn presentes en la RAM, la “obtencién de datos de indices ¢GEHSMSEA SAMENESS pSRESS ‘om la cbtencién de datos mediante el escanco de documentos. Usar consultas cubiertas Para probar las consultas cubiertas, considereel siguiente documento en lacoleccién de usuarios fl "id" Objecttd('534025974852426020000002" ‘contact’:"987654321 “dob! "01-01-1991", ‘gender':"Mr, “Torn Henzamin “user_name’:"tombenaamin" 1 Primero crearemos un indice compuesto paral coleccién de usua- rigs en os campos género y nombre de usuario usandola siguiente ‘Ahora, este indice cubrié la siguiente consulta: Es decir, para la consulta anterior, MongoDB no buscaria documentos de la base de datos. En su lugar, obtendria los datos necesarios de los datos indexados, lo que es muy rapido. Dado que nuestro indice no ineluye el campo jd, Jo hemos excluido explicitamente del conjunto de resultados de nuestra consulta, ya que MongoDB de forma predeterminada devuelve el campo iden. cada consulta. Entonces, a siguiente consulta no se habria cubierto dentro del indice creado anteriormente: Por ltimo, recuerde que un indiceno puede cubrir una consulta si: + Cualquiera de os campos indexados es una matriz ‘Cusiquieradelos campos indexados es un subdocumento Elanilisis de consultas es un aspecto muy importante para medirla eficacia dela base de datos y el diseio de indexacisn. Aprenderemos acerca dela consultas $ explica y $ sugerencia que se usan con Frecuencia Usando $ explicar Eloperador $ explica proporciona informacién sobre la consulta, los {ndlerulzadonen ina consulta y ora ertaditicas. Ee my tla tnalte: qué tan bien atin optimiza eu indices Enel ultimo capitulo, ya habiamos creado un indice para la coleccién de usuarios en los campos género y nombre de usuario utilizando la siguiente const >dbusers ensureindes(genderiuser.name:)) ‘Ahora usaremos § explicar en la siguiente consults: > users find{ gender'h),{user_name:, id0))explaind La consulta explica () anterior devuelve el siguiente resultado analizado: ‘ “eursor":"BtreeCursor gender_1_user_name_1", “ishtultikey" false, oe, “nseannedObjects":0, mnscanned": 1, “nscannedObjectsAllPlans":0, “nacannedallPlans*:2, “scanAndOrder": false, "indexOnly":true, “nvields":0, “nChunkskips':0, “milis*:0, ‘indexBounds"{ "gender" :| L “user name": [ C t *$minElement":1 » { *$maxzlement” ) 1 1 1 } ‘Ahora veremos los campos en este conjuntode resultados: Elvalor verdaidero de indexOnly indica que esta consulta hautilizado la indexacién, -Eleampo del eursor especifica el tipo de cursor utiizado. El tipo BTreeCursor indica que se utilizé un indice y también dda el nombre del indice utilizado. HasieCursor indica que se realiz6 un andlisis completo sin utilizar ningtin indice. indica el miimero de documentos que coinciden devuel- tos. -nseannedObjects indica el nimero total de documentos eseaneados. Usando $ hint Floperador $ hint obliga al optimizador de consultas a utilizar el in- dice especificado para ejecutar una consulta. Estoes particularmente ‘itil cuando desea probar el rendimiento de una consulta con diferen- tes indices. Por ejemplo, la siguiente consulta specifica el indice de los campos género y nombre_de_usuario que se utilizard para esta consulta: >ab users find\ gender“) ,{user_name:t, name:1)) \40})hint(igender- user, ara analizr la consulta anterior usando $ explicar: >db users find(gender "M1 ,fuser_name:, id-0) hint (gender:1juser_ ppame-1)explain() MongoDB -@peratisnestomicas Datos del modelo para operaciones atémicas lenfoque recomendado para mantener ls atomicidad seria ‘mantener toda la informacién zelacionada, que con frecuencia se actualiza junta e{i#SSISUSeuinente Ulizand MOCu MERON AERIS - tados . Esto aseguraria que todas las actualizaciones d@.un solo docu- _ mento sean atémicas. CConsidere el siguiente documento de productos: f ‘ea, “product name”: "Samsung $3", ‘category's"mobiles', ‘customer john, “date"7-Jan-2014| Enestedocumento, hemos incorporado la informacién del cliente {que compra el producto en el eampo product_bought by . Ahora, ccada ver que un nuevo cliente compra el producto, primero verifica- remos sel producto todavia est disponible usando el campo pro- ‘duct_available Siest disponible, educiremos el valor del campo ‘product_available y también insertaremos el documento incrustado {del nuevo cliente en el campo product bought by. Vamos autilizar- findAndModify de comandos para esta funcionalidad, ya que busca y ‘actualiza el documento en el mismo camino. >db products findandModify| query: id2 product available( gO), update’ Sin: iproduct available), $push {product_bought by-eustomer ‘rb’ date"®-Jan-2014") ) » Nuestro enfoque de documento incrustado y el uso de a consulta ‘indAndModify asegura que a informacién de compra del producto seactualice slo el producto esté disponible. toda esta transac- ‘ibn, al estar en la misma consulta es atémica En contraste con esto, considere el escenario en el que podriamos ‘haber mantenido la disponibilidad del produeto y la informacin, sobre quién comprs el producto, por separado. En este caso, primero ‘comprobaremos siel producto esta disponible mediante la primera msulta. Luego en la segunda consulta actualizaremos la informa- sn de compra, Sin embargo, es posible que entrelas ejecuciones de ‘estas dos consultas algtin otro usuario haya comprad el producto y ‘yano esté disponible. Sin saber esto, nuestra segunda consulta actua- lizard la informacion de compra en funcién del resultado de nuestra primera consulta. Esto hari que la base de datos sea inconsistente jue hemos vendido un producto que no est4 disponible MongoDB - Indexacién avanzada Corsidereesguiente document dela clecin de usuarios i tadaress { “city*"Los Angele "state’s"California’, ode"s"123" “ericket’, "blogs" L ‘name’s"Tom Benzamin’ , Eldocumento anterior contiene un subdocumento de direccién y ‘una matrie de etiquetas Campos de matriz de indexacién Supongamos que queremos buscar documentos de usuario en fun cidn delas etiquetas del usuario. Para esto, crearemas un indice en la smatriz de etiquetas en la coleccién. Lacreacién de un indice en una matria asu vez crea entradas de {indice separadas para cada uno de sus campos. Entonces, en nuestro caso, cuando creamos un {ndice en una matriz de etiquetas se crea- rn indices separados para sus valores musica, cricket y blogs. Para crear un indice en una matriz de etiquetas, use el siguiente cédigo: >ab.users ensureindex(("tags"1)) Después de crear el indice, podemos buscar en el campo de etiquetas ela coleccién de esta manera: db.users ind((tags“ericke)) Para verificar que se usa laindexacién adecuada, use el siguiente co- mando de explicactén: cricket) explain() db.usersfind( (tag: Elcomando anterior resulté en "cursor": "BtreeCursor tags_1" que confirma que se utiliza a indexacién adecuada. Phcacion de campos de subdocumentos _ cn hale eederyekip ancDado goatee econ acirarsor et pepecterenbenmehenibay nmap inner todos los campos del subdocuments Paracrear un indice ens tes amposdel subdocumento, use es frente cig > dass annursndenfadlie galls saa aan fae Una vez que se crea el indice, podemos buscar cualquiera de los cam- pos del subdocumento utilizando este indice dela siguiente manera: >dbsusersfind( ("address cty""Los Angeles") Recuerde que la expresién de la consulta debe seguir el orden del indice especificado, Entonces, el indice creado anteriormente admiti- ria las siguientes consultas: >db.usersfind( ("address city""Los Angeles "address state™*Califor- nia") ‘También admitiré la siguiente consulta: ‘neste capitulo, aprenderemos sobre las limitaciones de indexacion, 'y sus otros componentes. cada \dice acupa algo de espacio y proveca una sobrecarga en cada -Entonces, sirara vez usa suco- leccién para operaciones de lectura, tiene sentido no usar indices. ‘UsodeRAM Dado que los indices se almacenan en la RAM, debe asegurarse de que cltamafio total del indice no exceda el limite de RAM, Siel tamafio total aumenta eltamafo de a RAM, comenzaréa eliminar algunos {indices lo que provocaré una pérdida de rendimiento, Laindexacién no se puede utilizar en consultas que utiizan: (CGR ore negsin come fin § ‘operadores artméscos como $e Shere cdaeul Porlotant, siempre es recomendable verfcar el uso del indice para susconsultas. Limites de claves de indice [Apactirde a versin 2.6, blongoD8 no crearaun ince sel valor del campo de indice exstenteexcedee limite de a clave del indice. Insercién de documentos que superan ellimite de claves de indice ‘MongoDB no insertaré ningiin documento en una coleceién indexada siel valor del eampo indexado de este documento excede el mite de laclave de indice. Lo mismo ocurre con las utilidades mongorestore y ‘mongeimport. Rangos maximos indexados ‘Hemos estado usando el Id. De objeto de MongoD8 en todos los capitulos anteriores. En este capitulo, entenderemos la estructura de Objectia. GROG EATA APOGEE tiene Ia siguiente estructura: imeros 4 bytes que representan los segundos desdela epoca aeUnix Los siguiente 3 bytes sone idesifcadr dea ndguinn Los siguientes 2 bytes cnsisten en In idetifencin del proceso 1 itimos 3 bytes son un alr de contadoraleiorio Mongol Objectids come el valor predeterminado del campo _i- 4 de cada documento, que genera darante a creacin de cualquier documento La compejacombinacin de Object hace que todos os campos_d sean nico. Creando un nuevo Objectld Para generar un nuevo Objectid use el siguiente cédigo La declaracién anterior devolvié la siguiente identificacién generada, de forma tinica: Objectld('s349b4ddd2781d08c09890°3") >myObjctd- Object 349044278 1408-0989088) Creacién de mareadertiempo de un documento ado que eli Object almacena deforma predeterminada la marca de tiempo de 4 bytes, en Ia mayorfa de los casos no es necesarioal- ‘macenar |AHOMIMBERSEIORBe ningiin documento, Puede obtener la hora de creacién de un documento utilizando el métedo getTimes- tamp- _-Objectld("'5349b4ddd2781408c09890F4") getTimestamp() Esto devel fechasO. En algunos casos, es posible que necesiteel valor de Objectid en un. formato de cadena. Para convertir el Objectid en cadena, use el si- guiente cédigo “newObjectld. str El cédigo anterior devolverd el formato de cadena del Guid - datos en resultados agregados ities. MongoDB usa el comandSiaie- _pReduce para operaciones de reduccion de mapas. MapReduce se ut- "Ta generalmente para procesar grandes conjuntos dedatos Comando MapReduce A continuacién se muestra la sintaxis del comando mapReduce bis function( femit(key, value), //map function function(key,values) {return reduceFunction}, ( //reduce function out eolection, ‘query: document, sort: document, limit: number , > La funcién map-reduce primero consulta la coleecién, luego asigna Jos documentos de resultado para emitir pares clave-valor, que luego se reduce en funcién dellas claves que tienen multiples valores, Enla sintaxis anterior: -map es una funcién de javascript que asigna un valor con una lave y emite un par clave-valor -reducir es una funcién dejavascript que reduce o agrupa todos los documentos que tienen la misma clave out especifica la ubicacidn del resultado dea consulta de reduccién de mi consulta especifca los criterios de seleccinopcionates para seleccionar documentos -sort specifica los criterios de ordenacién opeionales Limite especiin el némero méximeopcional de documen- tos quesedevolverén Usando MapReduce (Consider a siguiente extractura de doeunento que almacena publi ‘caciones de usuarios. El documento almacena el nombre de usuario del usuario y el estado de a publicacién, ‘post_texts“tutorialspoint is an awesome website for tutorials", “user_name’"mark’, ctive" ‘Ahora, usaremos una funciém mapReduce en nuestra coleccién {de publicaciones para seleccionar todas las publicacionesactivas, agruparlas sobrella base de user_name y luego contar el nimero de publicaciones de cada usuario usando el siguiente cédigo: > db posts mapReduce( function) {emitthis:user_id);}, funetion|key, values) (return Array sumi(values)),{ ‘query:{statusactive", ‘outpost total” 1 ) Laconsulta mapReduce anterior general siguiente resultado, 1 “result :"post total’, *timmenilis=9, counts": ( “reduce: 2 ‘output’: 2 Elresultado muestra que un total de 4 documentos coincidieron con a consulta estado: "activo, la funeién de mapa emitié 4 docu- ‘mentos con pares clave-valor y, finalmente, la funcién de reduccién, agrupé documentos mapeados que tienen las mismas claves en 2 Pata ver el resultado de esta consulta mapReduce, use el operador de busqueda - > db posts mapReduce( ‘unetion( {emit(this:user_id,);}, funetion(key, values) (return Array sum(values)), ( ‘query:{status active, ‘outpost_total" : sind) La consulta anterior da el siguiente resultado que indica que tanto Jos usuarios tom como mark tienen dos publicacionesen estados activos: De manera similar, las consultas de MapReduce se pueden utilizar ‘para construir consultas de agregacién complejas de gran tamafio. EI uso de funciones personalizadas de Javascript hace uso de MapRe- es muy flexible y potente. ongoDB -@usqusdaderext] vversién 2.4, MongoDB comenzé a admitir indices de dentro del contenido dela cadena. La biisqueda de cas de derivacién para buscar palabras especificas ‘en os campos de cadena eliminando palabras vacias derivadas co- moa, an, the, ete. Ena actualidad, MongoDB admite alrededor de 15 idiomas Habilitar la busqueda de texto Inicialmente, la bisqueda de texto era una funcion experimental, ‘pero. partir dela versién 2.6 la configuracién esti habilitada de forma predeterminada, Pero set uilizando la versén anterior de MongoDB, debe habilitar la basqueda de texto con el siguiente cd ab. posts ensureindex (post text “text ) Usar indice de texto “Ahora que hemos creado indice de texto en el campo post_text, ‘buscaremos todas as publicaciones que tengan la palabra tutorials- point en su texto >a posts find ftext{fsearchutorialspoint) Elcomando anterior devolvié los siguientes documentos de resultado ‘que tienen la palabra tutorialspoint en su texto de publicacién: "ig": Objectla("534934144852429-10000002"), les on tutorialspoint’, "id": Objectla('5349341f4852429¢10000003"), "post_text":"writing tutorials on mongodb’, "cage": ["mongodb’, "tutorial" ] 1 Siestd utlizando versiones antiguas de MongoDB, debe usar el si- ‘guiente comando: >db posts runCommand( text’ {search tutorialspoint )) Eluso de a basqueda de texto mejora enormemente la eficiencia dela queda en comparacion con la busqueda normal liminar indice de texto |climinar un indice de texto existente, primero busque el nombre del indice utilizando la siguiente consulta: db posts getindexes\) Después de obtener el nombre desu indice de la consulta anterior, jecute el siguiente comando, Aqui, post_text,text es el nombre del indice. bs dropindext post. tent. text) MongoDB - Expresion regular Las Aiitesiones regulares se utilizan con frecuencia en todos os {digmiabPara buscar un patrén o una palabra en cualquier cadena, -MongoDB también proporciona la funcionalidad de expresién regular ppara la coincidencia de patrones de cadena utilizando el operador $ regex. MongoDB usa PCRE (Perl Compatible Regular Expression) ‘como lenguaje de expresién regular. A diferencia dela bitsqueda de texto, no necesitamos realizar nin- ‘guna configuracin o comando para usar expresiones regulares Considere'a siguiente estructura del documento en la coleccién de publicaciones que contiene el texto dela publicacién y sus etiquetas: “post_text ‘enjoy the mongodb articles on tutorialspoint’, ags' | “mongodb’, “tutorialspoint™ 1 1 Usar expresin de expresiones regulares La siguiente consulta de expresiones regulares busca todas las publi- caciones que contienen tutorialspoint de cadena: > db pont ind\ pos text regextutrilopint {La miama consulta también oe puede escribir como: >a ports fin (post texts trlalspint/) Uso de expresiones regulares con mayisculas y minusculas Para quela bisqueda no distings entre mayisculasy mindsulas, usamos ¢] pardmetro $ options con valor $i . El siguiente comando bbuscard cadenas que tengan la palabra tutorialspoint ,independien- temente desi son maytisculaso mintisculas > db posts find{{post_text{$regextutorialspoint’ foptions:'$")) Uno de os resultados devueltos de esta consulta esl siguiente docu- ‘mento que contiene la palabra tutorialspoint en diferentes casos: id": Objecttd('534934374852429¢10000008" “post.text": “hey! this is my post on TutorialsPoint’, “tags: ["tutoralspoint” | Uso de expresiones regulares para elementos de matriz ‘También podemos ware concepto de expresén regula en el campo de matriz. Ext es paticularmente muy importante cuando impie- mentamos la funcionalida dela etiquetas, Porlotanto,sideseabus- cartodas as publiaciones que tengan etiqutas a partir dela palabra tutorial ya sea rtorial otutoralesotutorialpointoatoralphp), pede usar siguiente cédigo > db posts find (tage: {fregex"tutorial}) Optimizacién de consultas de expresiones regulares silos campos del document estin indexados,la consulta utiliar valores indexados para que coincidan con laexpre- sién regula. Estohace quel bisque sea muy ripidnen comparacién con la expresén regular que escanea toda la colaciin. - Sila expresin regular es una expresion de presi, todas lasevincidencias deben comenzar con una determinada cadena de caracteres. Por ejemplo sla expresion regex es 4 tut, entonces la consulta tiene que buscar solo aquellasc danas que comienzan con tut Trabajando con RockMongo geFMbn go es una herramienta de administracién de MongoDBcon la Gue puede administrar su servidor, bases de datos, colecciones, ‘documentos, indices y mucho més. Proporciona una forma muy sen- cilla de eer, escribir crear documentos. Es similar ala herramienta ‘PHPMyadmin para PHP y MySQL. Descargando RockMongo Puede descargar a iltima versén de Rocktongo desde i209 -sithunbcomsiwind/tockmongo Instalacién de RockMongo ‘Una vez descargacio, puede descomprimir el paquete en la carpeta raiz de suservidor y cambiar el nombre de la carpeta extraida a rockmon- {80 . Abra cualquier navegador web y acceda ala pigina index.php desde la carpeta rockmongo. Ingrese admin / admin como nombrede ‘usuario / contrasefa respectivamente, Trabajando con RockMongo ‘Ahora veremos algunas operaciones basicas que puede realizar con RockMongo, Creando una nueva base de datos Para crear una nueva base de datos, haga clic en la pestafa Bases de datos , Haga clic en Crear nueva base de datos Ena siguiente pantalla, proporcione el nombre dela nueva base de datos y haga clicen Crear. Veré que se agrega una nueva base de datos en el panel inquierdo, Creando nueva coleccién Para crear una nueva coleccién dentro de una base de datos, haga licen esa base de datos en el panel iaquierdo. Haga clicen elen- lace Nueva coleceién en la parte superior. Proporcione el nombre requerido de a coleceién. No se preocupe porlos otros campos de Esté limitado, Tamatio y Méx. Haga licen Crear. Se crearé una nueva co- lecciSn y podrés verlaenel panel zquierdo. Creando Nuevo Documento Para crear un nuevo documento, haga licen lacoleccién #laque desea agregar documentos. Cuando haga clic en una coleccién, podré ver todoslos documentos de esa coleccidn enumerados ali ara crear ‘un nuevo documento, haga clic en elenlace Insertar en la parte su- perior. Puede ingresar los datos del documento en formato JSON 0 de ‘matrizy hacer licen Guardar Exportar / Importar datos Para importar / exportar datos de cualquier coleccién, haga licen esa coleccidn y luego haga clic en elenlace Exportar / Importar en 1 panel superior. Siga las siguientes instrucciones para exportar sus datos en formato-zip y luego importeel mismo archivo ip para volver a importarlos datos. MongoDB - GridFS a a W@peeificacién de MongoDB para almacenar y recuperar archivos grandés como imigenes, archivos de audio, archivos de video, ete. Esuna especie de sistema de archivos para almacenar archivos, pero sus datoe se almacenan dentro de las coleeciones de ‘MongoDB. GridFS tiene a capacidad de almacenar archives incluso _mayores que su limite de tamatio de documento de 16 MB. GridF' divide un archivo en fragmentos y almacena cada fragmento de datos en un documento separado, cada uno de un tamafioméximo de 255k, Grids de forma predeterminada usa dos colecciones fs.fles + fe;chunks para almacenar los metadatos y los fragmentos del archi- vo, Cada fragmento se identifica por su campo_id Objectld nico. Los archivos fs, sirven como documento principal, El campo files id en el documento fs chunks vineula el fragmento. su padre. ‘A continuacién se muestra un documento de muestra dela coleccién, fefiles: qi ‘filename’: “test xt", ‘chunkSize’: NumberInt(261120), “uploadDate™ ISODate('2014-04-13711:32:33.5572°), mas""7b7629393216146S69b07F72c62cca4t", "length": Numberint( 646) : =Eldocumento especifica el nombre del archivo, el tamafio del frag- ‘mento, la fecha de carga y a longitud. ‘Accontinuacién se muestra un documento de muestra del documento fechunks: ( “files id Objectid('s34a75d19"54bfecea2fesab), “av: Numberin(o) data’ "Mongo Binary Data™ n Agregar archivos a GridFS ‘Ahara amacenanence un archive mp3 usando GridFS usanda el ea- ‘mando put. Para ell, usaremos la wilidad mongofilesexe presente en a capeta in de a carpeta de instalacién de MongoDA. ‘Abra srabolo del sistema, nevague hasta mongofles. nt enla carpet bin de a carpeta de instalacin de MongaD® y esribaels- guiente cddigo: >mongofiles exe -d gridfs put song.mp3 ‘Aqui, gridfs es el nombre de la base de datos en la que se almacenaré db fs chunks find{fles_id:Objectia('534a81 bfabsaasds3td4d))) En mi caso, la consulta arojé 40 documentos, lo que significa que todo el documento mp3 se smentos de datos. MongoDB - Co es limitadas ‘que siguen el orden de insereién para admit para as operaciones de ereacién, lectura y eliminacién, Por circular, significa que cuando se agota eltamatio jo asignado ala coleccién, ‘comenzara a eliminar el documento més antiguo delacoleccién sin proporcionar ningtin comando explicit. Las coleeciones limitadas restringen las actualizaciones de los ‘documentos sila actualizacién da como resultado un mayor tamatio db createCollection("cappedLogCollection’ (eapped-truesize:10000)) ‘demas del tamatio de la coleceién, también podemos limitar la can- ‘idad de documentos en la coleccién usando el parimetro max - >db createCollection(‘cappedLogCollection’ (cappedL-truesize:10000, ‘max-1000)) ‘i desea verificar si una colecci6n esta limitada ono, use el siguiente ‘comando isCapped >db capped LogCollection isCapped() ‘Sihay una eoleccién existente que planea convertir alimitada, puede ‘hacerlo com el siguiente eédigo: >db runCommand( (‘convertToCapped'postssize:10000]) Este igo convertiria nuestras publicaciones de coleccién existen- tes en una coleccién limitada, Consulta de coleccién limitada De forma predeterminada, una consulta de bisqueda en una colec- ign limitada mostrar los resultados en el orden de insercién, Pero si desea que los documentos se recuperen en orden inverso, use el.co- ‘mando sort como se muestra en el siguiente eddige: >db cappedLogcollection find) sort((Snatural:-1}) Hay algunos otros puntos importantes con respecto a las colecciones limitadas que vale la pena conocer: No podemos eliminar documentos de una coleccién limitada, “No hay indices predeterminados presentes en una cole: ign limiteda, ni siquiera en el campo id. -Alinsertar un nuevo documento, MongoDB no tiene que Dbuscar realmente un lugar para acomodar un nuevo docu: ‘mento en el disco. Puede insertar ciegamenteel nuevo do- ‘cumento al final de la coleccién. Esto hace que las operacio- nes de insercién en colecciones limitadas sean muy ripidas. -Demanera similar, mientras lee documentos, MongoDB devuelvelos documentos en el mismo orden en que estin presentes en el disco, Esto hace que la operacién de lectura sea muy rapida incremento ‘MongoDB no tiene una funcionali to automatico lista ppara usar, como las bases de datos SQL. De forim& predeterminada, utiliza el Objectid de 12 bytes para el campo id como clave principal para identifiar de forma tinicalos documentos. Sin embargo, puede haber escenarios en os que queramos que el campo id tenga algiin valor autoinerementado que no sea Object Dado que esta no es una caracteristica predeterminada en MongoDB, lograremos esta funcionalidad mediante programacin mediante el uso de una coleccién de eontadores como lo sugiere la documenta- cin de MongoDB. Uso de Counter Collection CConsidere el siguiente documento de produetos . Queremos que el ‘campo _id sea una secuencia de enteros autoincrementada desde 1, 2,3,4hastan, sme’"AppleiPhone’, "category’: mobiles" 1 Paraello,cree una coleccién de eontadores , que reali {guimiento del iltimo valor de secuencia para todos los campos de db createCollection(counters") ‘Ahora, insertaremos el siguiente documento en lacoleccién de conta- dores con productid como clave: id'productia’, ne AO a campo valarsecvenearealza un seguimiento del ito valorde injasieas ‘Utilice el siguiente cédigo para insertar este documento de secuencia enlacoleeion de contadores: sdbcountersinsert( dr productd sequence valueoD) Creando la funcién de Javascript ‘Aor, crearemos una funcién getNextSequenceValue gue tomar elnombredelasecuencia como entrada ineementar el mimero de secuenciaen 1y devolved el nimero de secuenciaactualizado. En resto caso, el nombre dela secvencia es producti function getNextSequenceValue(sequenceName){ ‘var sequenceDocument = db counters indandModiy(( ‘query id sequenceNare “date (fine sequence valve), newarue D ‘etum sequencaDocument.guanct vali ' Usando la funcién de Javascript Ahora usaremo la funn getNext SequenceValue mientras creamos tun evo documento asignamosel valor de secuencia devuelto como elcampo id del documento Ingerte dos documentos de muestra usando el siguiente eédigo: > db products insert(( *a''getNextsequenceValue("producti’), “product_name’"Apple iPhone", “category""mobiles" » sdb,products.insert( "ld getNextSequenceValue(*productié’), "product name"'Samsung $3", ‘category''mobiles” » Come puede ver, hemos utilizado la funcién getNextSequenceValue para establecerel valor del campo id. Para verificar la funcionalidad, busquemos los documentos usando el comando buscar - db produets.findd) Laconsulta anterior devolvié los siguientes documentos con el campo id inerementado autométicamente: {-d":1,"product_name' “Apple iPhone’, ‘category’ "mobiles*] (a: 2, "product name" :"Samsung3, "category" :"mobiles")

También podría gustarte