Traducción Manual MongoDB 3.2

37
Traducción Manual “Getting Started with MongoDB (MongoDB Shell Edition)” Introducción a MongoDB MongoDB es una base de datos para documentos de código abierto, que proporciona alto desarrollo, alta disponibilidad  y escalado automático. MongoDB obvia la necesidad de un Objet Relational Mapping (ORM) para facilitar el desarrollo. Documentos Un registro en MongoDB es denominado documento, y se trata de una estructura de datos compuesta de pares clave-valor, por ello los documentos son similares a los objetos JSON. El valor de los pares o campos pueden ser también otros documentos, arrays y arrays de documentos. Ejemplo: ! #$%&# ' ()*+,-.&/#01,200123)4,5+)36565)&72# 89 #:&&;+<<#  ' ! #<-;++-# ' #3 =>+?@+#9 #A%B,C&+# ' #67740# 9 #)@%D&%?E# ' #6157#9 #,CC;&# ' F G4HI200416H 9 17I44373JJ  K9 L9 #)C;C@EM# ' #N:?M:--:?# 9 #,@%<%?+# ' #.-:D%:?#9 #E;:&+<#  ' F ! #&:-+#  ' .O(P:-+/#3761G67G76Q77'77'77R# 89 #E;:&+#  ' #=#9 #<,C;+# ' 66 L9 ! #&:-+#  ' .O(P:-+/#3761G76G6JQ77'77'77R# 89 #E;:&+#  ' #S#9 #<,C;+# ' 64 L K9 #?:T+# ' #U+DD:#9

Transcript of Traducción Manual MongoDB 3.2

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 1/37

Traducción Manual “Getting Started with MongoDB (MongoDB Shell Edition)”

Introducción a MongoDB

MongoDB es una base de datos para documentos de código abierto, queproporciona alto desarrollo, alta disponibilidad  y escalado automático.

MongoDB obvia la necesidad de un Objet Relational Mapping  (ORM) parafacilitar el desarrollo.

Documentos

Un registro en MongoDB es denominado documento, y se trata de una

estructura de datos compuesta de pares clave-valor, por ello los documentosson similares a los objetos JSON. El valor de los pares o campos pueden sertambién otros documentos, arrays y arrays de documentos.

Ejemplo:

!

#$%&# ' ()*+,-.&/#01,200123)4,5+)36565)&72#89

#:&&;+<<# ' !

#<-;++-# ' #3 =>+?@+#9#A%B,C&+# ' #67740#9

#)@%D&%?E# ' #6157#9

#,CC;&# ' F G4HI200416H9 17I44373JJ K9

L9

#)C;C@EM# ' #N:?M:--:?#9

#,@%<%?+# ' #.-:D%:?#9

#E;:&+<# ' F

!

#&:-+# ' .O(P:-+/#3761G67G76Q77'77'77R#89#E;:&+# ' #=#9

#<,C;+# ' 66 

L9

!

#&:-+# ' .O(P:-+/#3761G76G6JQ77'77'77R#89

#E;:&+# ' #S#9

#<,C;+# ' 64 

L

K9#?:T+# ' #U+DD:#9

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 2/37

  #;+<-:@;:?-$%&# ' #16471J37# 

L

La sintaxis de los documentos como los objetos JSON o BSON es:

{ “<campo1>”:”<valor>” , “<campo2>”:<valor númerico> }

En el caso de documentos embebidos se abrirá de nuevo otra llave dentro deldocumento que lo contiene. Por otra parte los arrays y arrays de documentosse declaran con corchetes, como se comprueba en el ejemplo anterior.

Nota: En la declaración de campos no son obligatorias las comillas cuando seejecutan instrucciones desde el Shell de MongoDB. No obstante, algunos

drivers de conexión de lenguajes de programación pueden necesitar su uso.

Colecciones

MongoDB almacena los documentos en colecciones, siendo el equivalente alas tablas en las bases de datos relacionales. En cambio, a diferencia de lastablas, las colecciones no necesitan que los documentos que contiene tenganel mismo esquema.

En MongoDB, los documentos almacenados en una colección deben tener uncampo con valor unívoco _id que actúa como clave primaria.

Instalación de MongoDB

Requerimientos

MongoDB Community Edition requiere Windows Server 2008 R2, Windows Vista, o posteriores. El archivo instalador de extensión .msi incluye todas las

dependencias de software y automáticamente actualizara cualquier versiónanterior de MongoDB instalada de la misma forma.

Nota: En las versiones Windows Server 2008 R2 ó Windows 7 es necesarioinstalar el Hotfix  de este enlace http://support.microsoft.com/kb/2731284 

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 3/37

 Conseguir MongoDB Community Edition en Windows

1 Determinar que versión de MongoDB necesitamos.

Existen actualmente tres versiones de MongoDB para Windows:

MongoDB for Windows 64-bit para Windows Server 2008 R2, Windows 7 64-bit, el resto de versiones posteriores de Windows. Incluye las mejoras recientesde MongoDB para Windows.

MongoDB for Windows 32-bit para cualquier versión de Windows de 32-bitposterior a Vista. Solo soporta bases de datos inferiores a 2GB. Puede no estar

disponible en el futuro esta versión.

MongoDB for Windows 64-bit para Windows Vista, Windows Server 2003,yWindows Server 2008. No incluye las mejoras recientes.

Para conocer la versión de Windows del equipo en el que trabajamos,podemos usar en la línea de comandos:

VT%, C< E+- ,:B-%C?

VT%, C< E+- C<:;,M%-+,-@;+

2 Descargar MongoDB para Windows.

La última ‘release’ en producción se descarga de la página web de descargasde MongoDB, asegúrandonos seleccionar la versión correcta ya que la versiónde 64-bit no funciona en sistemas de 32-bit.

Instalación de MongoDB Community Edition en Windows.

Instalación interactiva.

En el explorador de Windows, localizar el archivo .msi de MongoDBdescargado, que habitualmente estará en la carpeta de descargar. Realizardoble clic sobre el mismo. Varias pantallas nos guiarán en el proceso deinstalación, siendo posible especificar el directorio de instalación siseleccionamos la opción de instalación ‘custom’.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 4/37

MongoDB es ‘autocontenido’ y no tiene ninguna dependencia adicional en elsistema. Es posible ejecutar MongoDB desde otro directorio diferente a C:\que es en el que se instala por defecto.

Instalación silenciosa.

Se puede llevar a cabo una instalación automática o ‘silenciosa’ en la terminalde comandos de Windows.

1 Abrimos la terminal de Windows como administrador.Para ello pulsamos la tecla con el icono de Windows, tecleamos cmd.exe ysobre el icono pulsamos con el ratón derecho seleccionando ‘ejecutar comoadministrador’, aceptando la advertencia.

2 Instalamos MongoDB.Se teclean las siguientes instrucciones:

T<%+W+,I+W+ XY X% TC?EC&)GV%?H3GW5J$J1G3775BD@<G<<DGHI7I1<%E?+&IT<% Z

.[OQ=\\\(]=Q.([^#]'_TC?EC&)# Z

=PP\(]=\^#:DD# 

Si se necesitará, se puede cambiar el directorio de instalación cambiando elvalor de INSTALLLOCATION.

Por defecto, MongoDB instala todos los binarios a través del argumentoADDLOCAL, para instalar componentes específicos se pueden determinar eneste argumento, separados por comas los siguientes componentes:

]CTBC?+?- O+- S%?:;%+<

O+;>+; TC?EC&I+W+

`C@-+; TC?EC<I+W+

]D%+?- TC?ECI+W+

NC?%-C;%?EQCCD< TC?EC<-:-I+W+9 TC?EC-CBI+W+.TBC;-aWBC;-QCCD< TC?EC&@TBI+W+9 TC?EC;+<-C;+I+W+9 TC?EC+WBC;-I+W+9 TC?EC%TBC;-I+W+

N%<,+DD:?+C@<QCCD< )<C?&@TBI+W+9 TC?ECb%D+<I+W+9 TC?ECCBDCEI+W+9 TC?ECB+;bI+W+

Ejecución MongoDB Community Edition

Advertencia: Se recomienda ejecutar MongoDB en redes publicas con laconfiguración auth. MongoDB está diseñado para redes seguras y la base dedatos no dispone por defecto de modo seguro.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 5/37

1 Establecer el ‘ecosistema’ MongoDB.

MongoDB requiere un directorio de datos para almacenarlos. Por defecto, laruta de ese directorio es \data\db. Se puede crear desde la terminal de

windows con:

md \data\db\

Se puede especificar una ruta diferente para este directorio, usando la opción–dbpath para el ejecutable (del servidor) mongod.exe como se muestra eneste ejemplo:

C:\mongodb\bin\mongod.exe --dbpath d:\test\mongodb\data

Si la ruta incluye espacios en los nombres de las carpetas hay que asegurarsede incluir carpetas como se muestra en este otro ejemplo:

C:\mongodb\bin\mongod.exe --dbpath "d:\test\mongo db data"

También se puede especificar el valor de dbpath en un archivo deconfiguración.

2 Arranque de MongoDB

Para arrancar MongoDB, ejecutar mongod.exe por ejemplo desde el prompt:

C:\mongodb\bin\mongod.exe

Esto inicializa el principal proceso de la base de datos MongoDB. El mensaje‘waiting for connections’ que se muestra en la consola indica que el procesomongod.exe se esta ejecutando con éxito.

Dependiendo del nivel de seguridad del sistema, Windows puede lanzar uncuadro de diálogo de alerta indicando que algunas características decomunicación con las redes están bloqueadas y debemos pulsar ‘allow’ parapermitir el acceso a redes privadas. Para más información sobre seguridad enMongoDB debemos leer la Documentación de Seguridad.

3 Conexión a MongoDB

Para conectarnos a la base de datos a través del Shell de MongoDB, abrimosuna nueva terminal de la línea de comandos de Windows y tecleamos:

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 6/37

 C:\mongodb\bin\mongo.exe

Si queremos desarrollar aplicaciones usando .NET, obtendremos más

información en http://docs.mongodb.org/ecosystem/drivers/csharp 

Configurar un Servidor Windows para MongoDB Community Edition

1 Abrir la terminal de Windows como administrador.

2 Crear los directorios

Crear los directorios para las bases datos y log.

mkdir c:\data\db

mkdir c:\data\log

3 Crear un archivo de configuración

El archivo debe ser del tipo systemLog.path, incluyendo las opciones deconfiguración apropiadas.

Por ejemplo, podemos crear un archivo en C:\mongodb\mongod.cfg queespeficique systemLog.path y storage.dbPath:

systemLog:destination: filepath: c:\data\log\mongod.log

storage:dbPath: c:\data\db

4 Instalación del servidor MongoDB

Importante: Ejecutar todas los comandos en la terminal de Windows conautorizaciones de Administrador.

Instalamos el servidor MongoDB inicializando mongod.exe con la opción –install y la opción –config para especificar los archivos creados en el pasoanterior. Por ejemplo:

"C:\mongodb\bin\mongod.exe" --config "C:\mongodb\mongod.cfg" –install

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 7/37

 Para usar una ruta alternativa, especificarla en el archivo de configuración (e.g.C:\mongodb\mongod.cfg) o en la línea de comandos con la opción --dbpath.

Si lo necesitáramos, se pueden instalar servidores para múltiples instancias demongod.exe o mongos.exe. Se instala cada servidor con un único --serviceName y --serviceDisplayName. Es recomendable usar múltiplesinstancias sólo cuando los recursos del sistema sean suficientes y nuestrodiseño lo requiera.

5 Inicializando el Servidor MongoDB

net start MongoDB

6 Parar o borrar el Servidor MongoDB

Para parar el servidor usamos:

net stop MongoDB

Para borrar el servidor usamos:

"C:\mongodb\bin\mongod.exe" --remove

Crear manualmente un Servidor Windows para MongoDB Community Edition

Se puede configurar el servidor MongoDB como un Servidor Windows quearranque inmediatamente al iniciar el sistema.

Pasos 1 y 3 idénticos al anterior.

4 Crear el Servidor MongoDB

sc.exe create MongoDB binPath= "C:\mongodb\bin\mongod.exe --service --config=\"C:\mongodb\mongod.cfg\"" DisplayName= "MongoDB" start="auto"

El archivo sc.exe necesita espacio entre “=” y el valor de la ruta “C:\...” y barrainvertida “\” para escapar las comillas de la propia ruta.

Si se crea con éxito, se visualiza el siguiente log:

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 8/37

[SC] CreateService SUCCESS

Los pasos 5 y 6 son idénticos al caso anterior.

Importación de un ejemplo de conjunto de datos.

Los ejemplos de esta guía son usados de una colección de datos derestaurantes implementados en la base de datos test.

Este es un ejemplo de uno de los documentos:

{

"address": {"building": "1007","coord": [ -73.856077, 40.848447 ],"street": "Morris Park Ave","zipcode": "10462"

 },"borough": "Bronx","cuisine": "Bakery","grades": [

{ "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },{ "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },{ "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },{ "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },{ "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }

],"name": "Morris Park Bake Shop","restaurant_id": "30075445"

 }

Usaremos el siguiente procedimiento para importar la colección.

Requisitos previos.

Debemos tener una instancia mongod para importar a la base de datos.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 9/37

 

Procedimiento

1 Obtención de datos.

Obtenemos el conjunto de datos dehttps://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/dataset.json y lo guardamos a un archivo llamado primer-dataset.json.

Nota: Hay que asegurarse de grabarlo como .json sin la extesión webarchive uotra que añadiera por defecto el navegador

2 Importación de los datos a la colección.

En la terminal de windows, usamos mongoimport para insertar los documentsen la colección restaurants en la base de datos test. Si la colección ya existieraen la base de datos test database, la operación en primer lugar la borrará.

mongoimport --db test --collection restaurants --drop --file primer-dataset.json

Nota: teclear la instrucción en c:\bin\ que es donde se encuentra el ejecutablemongoimport y ubicar el archivo en la misma ruta.

La operación mongoimport conecta la instancia MongoDB en el puertonúmero 27017 de localhost.

Para importar datos a una instancia mongod en un host o puerto diferente sedebe especificar el hostname o puerto incluyendo las opciones --host y --porten el comando anterior.

MongoDB Shell (mongo)

La consola mongo es un interface interactivo JavaScript a MongoDB y estáincluido en el paquete MongoDB. Podemos usar la consola mongo tanto pararealizar consultas y actualizar datos como para desarrollar operaciones deadministración de la base de datos.

Inicialización de mongo

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 10/37

Una vez instalado e inicializado el servidor MongoDB, conectamos la consolamongo a la instancia. Es imprescindible asegurarse de que MongoDB está enservicio antes de lanzar la consola mongo.

Para ello, en el mismo sistema en el que está funcionando MongoDB, abrimosla terminal de Windows e iniciamos la consola mongo con el siguientecomando:

mongo

En caso de un sistema Windows, se lanza con el ejecutable añadiendo .exe.

mongo.exe

siendo necesario añadir la ruta correspondiente si estamos en un directoriodiferente al de este archivo.

Cuando iniciamos mongo sin más argumentos, nos conectamos por defecto ala interfaz localhost, puerto 27017 de la instancia MongoDB. Para un host opuerto diferente podemos ver más información enhttp://docs.mongodb.org/manual/reference/program/mongo

Ayuda en la Consola Mongo.

Para obtener un listado de comandos con sus características, tecleamos:

help

La consola mongo proporciona autocompletado de comandos mediante eltabulador así como atajos de teclado de manera similar al ‘shell bash’. Porejemplo, se pude usar la flecha hacia arriba y hacia abajo para recuperar las

instrucciones del historial.

Inserción de Datos en la Consola Mongo.

Podemos insertar documentos mediante el método insert() a una colección deMongoDB. Como el método exige determinar a qué colección se van ainsertar los documentos, si esa colección no existiese, se crea al mismo tiempoque insertamos los documentos.

Requisitos previos.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 11/37

En la consola mongo, nos conectamos a la base de datos test, usando paraello:

use test

Este mismo comando sirve para crear una base de datos en caso de que noexistiera.

Inserción de un Documento.

Insertamos un documento en la colección restaurants, en caso de que noexistiese la colección se crearía al mismo tiempo:

db.restaurants.insert({"address" : {

"street" : "2 Avenue","zipcode" : "10075","building" : "1480","coord" : [ -73.9557413, 40.7720266 ],

 },"borough" : "Manhattan",

"cuisine" : "Italian","grades" : [{

"date" : ISODate("2014-10-01T00:00:00Z"),"grade" : "A","score" : 11

 },{

"date" : ISODate("2014-01-16T00:00:00Z"),

"grade" : "B","score" : 17 }

],"name" : "Vella","restaurant_id" : "41704620"

 })

Una vez introducido, el sistema devuelve un objeto WriteResult con el estatusde la operación:

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 12/37

 WriteResult({ "nInserted" : 1 })

Si no pasamos en el método insert() ningún campo _id, la consola mongo

automáticamente añade al documento este campo dándole valor a través deun ObjectId generado automáticamente.

Buscar o Consultar Datos con la Consola Mongo.

Usamos el método find() para realizar una consulta y obtener datos de unacolección en MongoDB. Todas las consultas en MongoDB se ejecutan en elámbito de una colección simple.

Las consultas pueden devolver todos los documentos de una colección o sololos que cumplan unos criterios o filtros específicos. Se pueden especificar losfiltros o criterios de los documentos al pasarlos como parámetros del métodofind().

El método find() devuelve los resultados a un cursor, que es un objeto iteradocon los documentos producidos (por el método de consulta).

Requisitos previos.

Los ejemplos de esta sección utilizan la colección restaurants de la base dedatos test, cuyas instrucciones de importación fueron detalladasanteriormente.

En la consola mongo conectada a la instancia en funcionamiento mongod, nosconectamos a la base de datos test.

use test

Consultas para todos los Documentos de una Colección.

Para devolver todos los documentos de una colección, llamamos al método sinningún criterio de documento. Por ejemplo, la siguiente operación devuelvetodos los documentos de la colección restaurants.

db.restaurants.find()

El resultado contiene todos los documentos de la colección.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 13/37

Especificar condiciones de igualdad.

Para especificar en el método de búsqueda, condiciones o criterios deigualdad usamos la sintaxis:

{ <field1>: <value1>, <field2>: <value2>, ... }

Si el campo <field> es primario y no es un campo que este en un documentoembebido o un array, se pueden usar u omitir las comillas cuando lointroducimos en los parámetros del método.

En el caso de que el campo <field> esté en un documento embebido o en unarray, se usa la notación del punto para acceder al mismo. Con la notación del

punto, es necesario incluir entre comillas el campo.

Consulta con un campo primario.

La siguiente operación busca documentos en los que el campo ‘borough’ seaigual ‘Manhattan’.

db.restaurants.find( { "borough": "Manhattan" } )

La consulta solo devolverá los documentos que cumplan esta condición.

Consulta con un campo de un documento embebido.

Para especificar una condición de un campo que está en un documentoembebido, usamos la notación del punto. Esta, requiere introducir entrecomillas el nombre del campo. El siguiente ejemplo especifica una operacióncon una condición de igualdad en la que el campo zipcode está en eldocumento embebido denominado address.

db.restaurants.find( { "address.zipcode": "10075" } )

El resultado devolverá solo los documentos que cumplan esta condición.

Consulta con un campo en un array de documentos.

En el ejemplo, el array grades está compuesto de documentos embebidos.Para especificar una condición con uno de los campos en esos documentos,usamos las notación del punto, que también requiere entrecomillado del

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 14/37

campo y documento. La siguiente consulta para documentos cuyo arraygrades contenga un documento con un campo grade igual a B sería:

db.restaurants.find( { "grades.grade": "B" } )

El resultado devolverá solo los documentos que cumplan esta condición.

Especificar condiciones con operadores.

MongoDB proporciona operadores para especificar condiciones en lasconsultas, como por ejemplo los operadores de comparación.

Aunque hay algunas excepciones , como los operadores condicionales $or y$and, las condiciones de las consultas usan los operadores generalmente de lasiguiente forma:

{ <field1>: { <operator1>: <value1> } }

Podemos consultar la lista completa de los operadores enhttp://docs.mongodb.org/manual/reference/operator/query

Operador Mayor que ($gt)

Una consulta con el método find() para los documentos cuyo array gradescontiene un documento embebido con un campo score mayor que 30 sería:

db.restaurants.find( { "grades.score": { $gt: 30 } } )

El resultado devolverá solo los documentos que cumplan esta condición.

Operador Menor que ($lt)

Una consulta con el método find() para los documentos cuyo array gradescontiene un documento embebido con un campo score mayor que 10 sería:

db.restaurants.find( { "grades.score": { $lt: 10 } } )

El resultado devolverá solo los documentos que cumplan esta condición.

Condiciones Combinadas

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 15/37

Podemos combinar múltiples condiciones en las consultas, con la conjunciónlógico (AND) y la disyunción lógica (OR).

Conjunción Lógica AND

Podemos especificar una conjunción lógica AND para una lista de condicionesen una consulta, separándolas por coma:

db.restaurants.find( { "cuisine": "Italian", "address.zipcode": "10075" } )

El resultado devolverá solo los documentos que cumplan a la vez estas doscondiciones.

Disyunción Lógica OR

Podemos especificar una disyunción lógica OR para una lista de condicionesen una consulta, usando el operador $or:

db.restaurants.find({ $or: [ { "cuisine": "Italian" }, { "address.zipcode": "10075" } ] }

)

El resultado devolverá los documentos que cumplan una u otra condición, queel campo cuisine tiene como valor Italian o el campo zipcode del documentoembebido address tiene como valor 10075.

Consultas con resultados ordenados

Para especificar un orden para los resultados obtenidos, añadimos el métodosort() a la consulta. En este método, se pasa un documento que contenga elcampo o campos que sirve de criterio de orden y el tipo de orden, siendo 1para orden ascendente o -1 para orden descendente.

Por ejemplo, la siguiente operación devuelve todos los documentos de lacolección restaurants ordenados primero por el campo borough en sentidoascendente y en segundo término se ordena por el campo zipcode deldocumento embebido address en sentido ascendente.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 16/37

 db.restaurants.find().sort( { "borough": 1, "address.zipcode": 1 } )

La operación devuelve todos los documentos ordenados por los campos y el

sentido designado.

Actualización de Datos con la Consola Mongo.

Podemos usar el método update() para actualizar documentos de unacolección. El método acepta como parámetros:

Un filtro a través de un documento para seleccionar los documentos aactualizar.

Una actualización de documento para especificar la modificación a llevar acabo y opciones de parámetros (opcional),

Para especificar el filtro de los datos a actualizar, usamos la misma estructura ysintaxis que en las condiciones de las consultas del apartado anterior.

Por defecto, el método update() actualiza un documento individual,pudiéndose usar la opción multi para actualizar todos los documentos quecumplan el criterio de selección.

No es posible con este método actualizar el valor del campo _id.

Actualización de campos específicos.

Para modificar el valor de un campo, MongoDB proporciona operadores deactualización, como $set para cambiar valores. Algunos operadores deactualización, como $set, creará el campo en el caso de que este no exista.Podemos ver las referencias para cada operador individual enhttp://docs.mongodb.org/manual/reference/operator/update 

Actualización de campos de primer nivel.

La siguiente operación actualiza el primer documento con el campo nameigual a Juni, usando el operador $set para actualizar el campo field y el

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 17/37

operador $currentDate para actualizar el campo lastModified con la fechaactual.

db.restaurants.update(

{ "name" : "Juni" },{$set: { "cuisine": "American (New)" },$currentDate: { "lastModified": true }

 })

La operación de actualización nos devuelve un objeto WriteResult quecontiene el status de la operación.

Actualizar múltiples documentos.

By default, the update() method updates a single document. To updatemultiple documents, use the multi option in the update() method. Thefollowing operation updates all documents that have address.zipcode fieldequal to "10016" and cuisine field equal to "Other", setting the cuisine field to"Category To Be Determined" and the lastModified field to the current date.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 18/37

 

Traducción Manual 3.2. Mongo DB

Operaciones MongoDB CRUD

MongoDB proprociona una amplia variedad de sentencias para la lectura y

manipulación de datos. Las siglas CRUD responden a las siglas en inglés paracrear, leer, actualizar y borrar. Estos términos son la base principal de todas lasinteracciones con esta base de datos.

Introducción a las Operaciones CRUD en MongoDB

MongoDB almacena datos en un formato de Documentos, similares al formatoJSON, en los cuales los datos se almacenan como pares clave-valor. LosDocumentos son similares a estructuras en otros lenguajes de programación

que asocian claves (campos) con valor (por ejemplo diccionarios, funcioneshash, mapas y arrays asociativos). En estricto sentido, los Documentos enMongo DB tienen un formato BSON, representación binaria de JSON contipos de información adicional. En los documentos, el valor de cada campopuede ser cualquier dato en formato BSON, incluyendo otros documentos,arrays y arrays de documentos.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 19/37

 Ejemplo de documento en formato BSON, el primer y tercer par clave-valor

tiene como dato un string, el segundo un entero, y el cuarto un array de

strings.

MongoDB almacena los Documentos en Colecciones. Una Colección sería portanto un grupo de Documentos relacionados entre si, que tienen criterios deindexación comunes. Las Colecciones son similares, con diferencias, a lasTablas en las bases de datos relacionales.

Esquema de una Colección 

Operaciones en la Base de Datos.

La forma de realizar operaciones en MongoDB es mediante Consultas(Queries) o métodos. La sintaxis de estas Queries comienzan especificando loscriterios (o condiciones) para identificar los documentos que MongoDB

devolverá al cliente, y también puede incluir proyecciones que incluyan los

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 20/37

campos de los cuales queremos devolver valores, así como modificadores paraincluir limites, exclusiones y criterios de orden a la hora de devolver los datos.

En el siguiente ejemplo se puede comprobar el criterio definido para

seleccionar un documento así como un modificador de orden.

Modificación de Datos.

La modificación de datos consiste en las operaciones CRUD, crear, leer,actualizar o borrar datos por sus siglas en inglés. En MongoDB, estasoperaciones modifican los datos de forma individual en cada Colección. Paralas operaciones de actualización o borrado de datos, se especificarán loscriterios para seleccionar los documentos a tratar. En el siguiente diagrama sedetalla un ejemplo con la operación de escritura insert, que añade un nuevodocumento a una colección llamada ‘users’.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 21/37

 

Operaciones de Lectura

Las operaciones de Lectura o Queries, seleccionan datos almacenados en labase de datos. En MongoDB, estas Queries seleccionan Documentos de unaColección individual.

Las Queries, especifican los criterios y condiciones de los Documentos aseleccionar y pueden incluir proyecciones que especifiquen los campos de losDocumentos seleccionados a devolver. De este modo, las proyecciones limitan

la cantidad de datos que MongoDB devolverá al cliente que se conectemediante la red.

Para las operaciones de lectura, MongoDB esta provista de un método con lasintaxis db.collection.find(). Este método acepta tanto criterios comoproyecciones y devuelve un cursor con los documentos seleccionados.Opcionalmente también permite incluir modificadores para imponer límites,exclusiones y ordenes en la devolución de los datos.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 22/37

El siguiente diagrama detalla los componentes de esta operación yposteriormente muestra su equivalente en SQL:

Esta operación selecciona los Documentos de la Colección ‘users’ quecumplen que la condición ‘age’ es mayor que 18, delimitado mediante eloperador $gt  (greater than). La operación devolverá cinco documentosseleccionados ya que el modificador limit tiene ese parámetro, con los paresclave-valor (campos) ‘_id’, ‘name’ y ‘address’ que fueron indicados en laproyección.

Comportamientos de las Queries.

• Todas las Queries en MongoDB tienen que estar referidas a una únicaColección.• Se pueden introducir límites, exclusiones y órdenes (de impresión de datos).• El orden de devolución de datos es indefinido a menos que se introduzca unmodificador sort().

• Las operaciones para modificar documentos existentes usan la misma sintaxispara seleccionar documentos como se verá a continuación.

• En los procesos de agregación aggregation pipeline (para llevar a cabovarios pasos en una misma instrucción), el operador $match proporcionaacceso a las Consultas MongoDB por pasos.

MongoDB además proporciona un método db.collection.findOne() como casoespecial del método find()  para devolver un sólo documento, que sería el

primero en caso de no introducir ningún parámetro como criterio entre losparéntesis.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 23/37

 Sentencias

En el siguiente diagrama se especifica una operación con los criterios definidos

por operadores para seleccionar Documentos de la colección ‘users’ y con elmodificador sort()  para imprimir por pantalla los resultados en ordenascendente.

Proyecciones

Por defecto, las Queries en MongoDB devuelven todos los campos (paresclaves-valor) de todos los documentos seleccionados. Para la limitar lacantidad de datos que MongoDB enviará a los clientes de las aplicaciones, seincluyen proyecciones en las Queries lo que reduce los requerimientos deprocesamiento de datos de la aplicación y de capacidad de la red detransmisión.

En el método find(), las proyecciones son el segundo argumento y especificanentre los paréntesis la lista de campos a devolver o excluir en los documentos.

Nota: Excepto para excluir el campo ‘_id’ en proyecciones de inclusión, no sepueden mezclar proyecciones de inclusión y exclusión para la selección decampos.

En el siguiente ejemplo, la Query selecciona campos de la Colección ‘users’con el criterio de que los documentos tienen que tener el campo ‘age’ igual a

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 24/37

18. Seguidamente, la proyección especifica que sólo se devolverá el campo‘name’ en los documentos seleccionados con el criterio anterior. Así mismo,dándole el valor 0 al campo ‘_id’ en la proyección, se especifica que no semuestre este campo.

Ejemplos de proyección para operaciones de Lectura.

Excluir un campo de los documentos seleccionados.

db.records.find( { "user_id": { $lt: 42 } }, { "history": 0 } )

La Query selecciona los Documentos de la Colección ‘records’ que cumplen elcriterio de que el campo ‘user_id’ sea menor que 42 mediante el operador $lt (lower than) y usa la proyección para el excluir el campo ‘history’ al darle a estael valor 0. Se puede comprobar que se usa la sintaxis de JSON para entre losparámetros del método, paréntesis, incluir los documentos JSON entre llaves yque los pares clave valor se representan mediante la clave siempre entrecomillas simples o dobles y el valor entre comillas simple o dobles si se tratade strings.

Devolver dos campos y el campo ‘_id’ de los documentos seleccionados

db.records.find( { "user_id": { $lt: 42 } }, { "name": 1, "email": 1 } )

Este ejemplo selecciona los Documentos de la Colección ‘records’ cuyo campo

‘user_id’ tenga un valor menor de 42 y de los seleccionados solo devolverá los

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 25/37

campos ‘name’ y ‘email’. Se puede comprobar como, aunque el campo ‘_id’,que se genera automáticamente al insertar un documento como se verá másadelante, no ha sido incluido en la proyección, aparece por defecto en ladevolución de datos.

Devolver dos campos y excluir el campo ‘_id’.

db.records.find( { "user_id": { $lt: 42} }, { "_id": 0, "name": 1 , "email": 1 } )

Este ejemplo selecciona los Documentos de la Colección ‘records’ cuyo campo‘user_id’ tenga un valor menor de 42 y usa la proyección para, añadiéndole elvalor 1 a los campos ‘name’ y ‘email’ solo devolver estos campos de losdocumentos seleccionados con el criterio. Para que no devuelva el valor del

campo ‘_id’ es necesario especificar el valor 0 de exclusión a ese campo,siendo el único caso en el que se pueden especificar inclusiones y exclusionesen la proyección.

Comportamientos de las Proyecciones en MongoDB

• Por defecto, el campo ‘_id’ es incluido en los resultados, siendo necesariodarle el valor 0 en la proyección para excluirlo.• Para los documentos que contengan Arrays, MongoDB proporciona los

siguientes operadores para las proyecciones: $elemMatch, $slice, and $ (másel nombre del campo).• Para proyecciones relacionadas con los procesos por pasos aggregation

pipeline, se usa el operador  $project.

Cursor en MongoDB

En la consola de mongo, el método primario para las operaciones de lecturaes db.collection.find() , este método llama a la colección y devuelve al cursor

los documentos seleccionados.

Para acceder a los documentos, es necesario iterar el cursor, sin embargo, enla consola mongo, si el cursor no es asignado a una variable, automáticamentelimita la iteración a 20 documentos e imprime por pantalla los primeros 20resultados.

Por ejemplo, en la consola de mongo, la siguiente operación de lectura de lacolección ‘inventory’ cuyos documentos tienen un campo ‘type’ igual a ‘food’imprime por pantalla los primeros 20 resultados de manera automática.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 26/37

db.inventory.find( { type: 'food' } )

No obstante, existen procedimientos para iterar de manera manual el cursorsuperando ese límite.

Comportamientos del Cursor

Cierre de Cursores Inactivos

Por defecto, el servidor cierra los cursores inactivos tras 10 minutos deinactividad. Para modificar este comportamiento, se pude especificar el flagnoTimeout  en la query usando el método cursor.addOption(), teniendo encuenta que el cierre posterior será manual. En la consola de mongo se puede

configurar el flag noTimeout de la siguiente forma.

var myCursor = db.inventory.find().addOption(DBQuery.Option.noTimeout);

Se puede ampliar información acerca de este flag u otros para el cursor, en ladocumentación de cada driver que se utilice para conectar las aplicaciones conel servidor MongoD, y en la propia consola Mongo, el métodocursor.addOption()  proporciona una lista de los flags disponibles para elcursor.

Cursor Aislado

As a cursor returns documents, other operations may interleave with the query.For the MMAPv1 (page 613) storage engine, intervening write operations on adocument may result in a cursor that returns a docu- ment more than once ifthat document has changed. To handle this situation, see the information onsnapshot mode (page 850).

Lotes en el Cursor

El servidor MongoDB provee los resultados de la Query por lotes, siendo eltamaño de cada lote el máximo que permite el formato BSON. Para la mayoríade la Queries, el primer lote devuelve 101 documentos o los que no excedande 1 megabyte, siendo el siguiente tamaño de lotes de 4 megabytes. Esposible cambiar los tamaños por defecto de los lotes con los métodosbatchSize() y limit().

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 27/37

En las queries que incluyan el método sort(), el servidor carga en memoriatodos los documentos, desarrollando el orden definido antes de devolver losresultados.

Cuando el cursor itera y llega al final del lote, si hubiera mas resultados, elmétodo cursor.next()  desarrolla una operación getmore  para devolver elsiguiente lote. Para ver como cuantos Documentos permanecen en el lote sepuede usar el método objsLeftInBatch()  como se muestra en el siguienteejemplo:

var myCursor = db.inventory.find(); var myFirstDocument = myCursor.hasNext()? myCursor.next() : null;

myCursor.objsLeftInBatch();

Información del Cursor.

El método db.serverStatus() devuelve un Documento que incluye un campo‘metrics’ con la siguiente información: 

• número de cursores time out  desde el último reinicio del servidor.

• número de cursores abiertos con la opción DBQuery.Option.noTimeout

• número de cursores pinned  abiertos.

• número total de cursores abiertos.

En el siguiente ejemplo se llama al método db.serverStatus() y al mismotiempo se accede al campo ‘metrics’.

db.serverStatus().metrics.cursor

Que devuelve el siguiente documento:

{

"timedOut" : <number> "open" : { "noTimeout" : <number>, "pinned" :<number>, "total" : <number> }

 }

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 28/37

 Optimización de Queries

Los índices mejoran la eficiencia de las operaciones de lectura al reducir la

cantidad de datos que las queries necesitan procesar. Esto simplifica el trabajoasociado con al llevar a cabo las queries dentro de MongoDB.

Crear un Índice para apoyar las operaciones de lectura.

Si las aplicaciones consultan una colección de acuerdo a un campo concreto ogrupo de campos, un índice por campos o compuesto evitara que la querytenga que escanear la colección completa para devolver los valoresconsultados. Existe una documentación completa sobre índices en Mongo DB.

Ejemplo

Una aplicación consulta en la Colección ‘inventory’ dentro del campo ‘type’. Elvalor a consultar en el campo ‘type’ es ‘user-driven’.

var typeValue = <someUserInput>; db.inventory.find( { type: typeValue } );

Para mejorar el desarrollo de esta consulta, se añade un índice ascendente o

descendente para la Colección ‘inventory’ y el campo ‘type’.

En la consola mongo, se pueden crear índices usando el métododb.collection.createIndex() :

db.inventory.createIndex( { type: 1 } )

El valor 1 asignado al campo ‘type’ determina el sentido ascendente del índicecreado con este método.

Para analizar el desarrollo de una query con un índice, se dispone de másinformación en el apartado Análisis de Desarrollo de Queries. Los índicesademás, pueden ser más eficientes añadiendo operaciones ‘sort’. Para másinformación sobre este método se dispone del apartado Tutoriales deIndexizado.

Queries Selectivas.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 29/37

Las queries selectivas tienen argumentos de exclusión o filtros para seleccionarDocumentos de una Colección y determinarán si se utilizan o no índices. Lasqueries más selectivas, lógicamente seleccionarán un menor número dedocumentos.

Por ejemplo, un criterio de selección con un valor concreto del campo ‘_id’ estan selectivo que seleccionará documento por documento. En cambio existenqueries poco selectivas, por ejemplo las que usen los operadores $nin y $ne yaque devolverán grandes cantidades de datos.

A veces la combinación de estos operadores con índices pueden dar peoresresultados que la misma query sin índices aunque escanee todos losDocumentos de la Colección.

Para más información, se puede ver en Expresiones Regulares.

Covered Query

Un índice es denominado covers index   para una query cuando tienen lassiguientes condiciones:

• Todos los campos son partes de un índice, y• Todos los campos devuelven sus resultados por el mismo índice.

Por ejemplo, la Colección ‘inventory’ tendría el siguiente índice en los campos‘type’ e ‘item’:

db.inventory.createIndex( { type: 1, item: 1 } )

Este índice es cover index   en la siguiente operación con queries sobre loscampos ‘type’ e ‘item’ (criterio) y devuelve sólo el campo ‘item’ (y proyección):

db.inventory.find({ type: "food", item:/^c/ },{ item: 1, _id: 0 })

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 30/37

Para el índice especificado sea cover index  para la query, la proyección debeespecificar el campo ‘_id’ igual a 0 para excluirlo, ya que el índice no incluyeeste campo.

Como el índice contiene todos los campos requeridos por la query, MongoDBpuede seleccionar ambos campos requeridos por las condiciones y devolverlos resultados solo usando el índice.

Consultando solo el índice, el proceso puede ser mucho más rápido. Las clavesde los índices son habitualmente más pequeñas que los documentos quecatalogan y los índices estarán disponibles en la memoria RAM osecuencialmente en el disco.

Limitaciones

Restriciones en los campos indexados.

Un índice no puede cover index  para una query si:

• alguno de los campos indexados en alguno de los documentos de lacolección incluye un valor de tipo array. En ese caso el índice es multi-key y nosoporta esta funcionalidad.

• alguno de los campos indexados contenidos en las condiciones o proyecciónde la query son campos pertenecientes a sub-documentos o documentosanidados en otro documento

Por ejemplo, los siguientes documentos de la colección ‘users’:

{ _id: 1, user: { login: "tester" }  } 

en la que el valor del campo ‘user’ es un documento a su vez formado por elcampo ‘login’ con valor ‘tester’.

La colección tiene el siguiente índice:

{ "user.login": 1 }

que no puede ser index cover  por la siguiente query:

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 31/37

db.users.find( { "user.login": "tester" }, { "user.login": 1, _id: 0 } )

Sin embargo, la query puede usar el índice { "user.login":1 }  para encontrardocumentos seleccionados.

Restricciones en Colecciones Sharded

Un índice no puede cover una consulta en una colección ‘sharded’ cuando….

An index cannot cover a query on a sharded collection when run against amongos if the index does not contain the shard key, with the followingexception for the _id index: If a query on a sharded collection only specifies acondition on the _id field and returns only the _id field, the _id index can cover

the query when run against a mongos even if the _id field is not the shard key.

Changed in version 3.0: In previous versions, an index cannot cover (page 68) aquery on a sharded collection when run against a mongos.

Método explain.

Para determinar cuando una query es una covered query, se usa la operación

db.collection.explain() y se revisa el resultado.

La operación  db.collection.explain()  proporciona información dentro de laoperación db.collection.update(). 

Para más información se puede consultar el apartado Measure Index Use.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 32/37

 Operaciones de Escritura

Una operación de escritura es cualquier operación que crea o modifica datos

en la instancia MongoDB. En MongoDB, las operaciones de escritura afectan auna Colección de manera individual. Todas las operaciones en MongoDBestán atomizadas (en el sentido transacción ACID todo o nada ) a nivel de unDocumento individual.

Hay tres clases de operaciones de escritura en MongoDB: insert, update  ydelete. Las operaciones insert  añaden nuevos Documentos a una Colección.Las operaciones update modifican Documentos existentes, y las operacionesdelete borran Documentos de una Colección. Ninguna de estas operaciones

puede afectar a más de un Documento de manera atomizada.

Para las operaciones de actualización y borrado, se pueden especificarCriterios, o filtros, que indentifiquen los documentos a actualizar o borrar.Estas operaciones utilizan las misma sintaxis que las Queries para lasoperaciones de lectura.

MongoDB allows applications to determine the acceptable level ofacknowledgement required of write operations. See Write Concern (page 138)

for more information.

Insert

MongoDB proporciona los siguientes métodos para insertar Documentos enuna Colección:

• db.collection.insertOne()

• db.collection.insertMany()

• db.collection.insert()

insertOne nuevo en la Versión 3.2.

db.collection.insertOne() inserta un documento individual

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 33/37

 

Ejemplo

La siguiente operación inserta un nuevo Documento en la Colección ‘users’. Elnuevo Documento tiene tres campos denominados ‘name’, ‘age’ y ‘status’.Aunque el Documento no especifica ningún campo ’_id’, MongoDB añadeeste campo y generando un valor para el nuevo Documento.

db.users.insertOne({name: "sue",age: 26,

status: "pending" }

)

El siguiente diagrama describe los componentes de la operación insertOne() en MongoDB:

y el mismo proceso en SQL

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 34/37

 

insertMany

db.collection.insertMany() inserta varios Documentos

Ejemplo

La siguiente operación inserta tres nuevos Documentos en la Colección ‘users’.Cada Documento tiene tres campos denominados ‘name’, ‘age’ y ‘status’.Aunque el Documento no especifica ningún campo ’_id’, MongoDB añadeeste campo y generando un valor para cada nuevo Documento.

db.users.insertMany([{ name: "sue", age: 26, status: "pending" },{ name: "bob", age: 25, status: "enrolled" },{ name: "ann", age: 28, status: "enrolled" }

])

El siguiente diagrama describe los componentes de la operación insertMany() 

en MongoDB:

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 35/37

 

y el mismo proceso en SQL

insert

En MongoDB, el método db.collection.insert()  un nuevo Documento a unaColección. Puede añadir un Documento individual o un array de Documentos.

Comportamiento del método insert.

El campo ‘_id’ es obligatorio en cada Documento MongoDB document. The_id field is like the document’s

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 36/37

Si se añadiera un nuevo Documento sin el campo ‘_id’, la librería del cliente ola instancia mongod añade un campo ‘_id’ con un valor ObjectId único. Si seañade un campo ‘_id’ con un valor que ya existe el sistema lanza unaexcepción.

El campo ‘_id’ es el único indexado por defecto en cada Colección.

Otros Métodos para añadir Documentos

Las operaciones métodos updateOne(), updateMany(), y replaceOne() aceptanel parámetro upsert. Cuando upsert : true, si no hay documentos coincidentes,un nuevo documento es creado conforme a la información pasada en laoperación.

Update

MongoDB proporciona los siguientes métodos para actualizar documentos enuna colección:

• db.collection.updateOne()• db.collection.updateMany()• db.collection.replaceOne()• db.collection.update()

updateOne

Nuevo en la versión 3.2. db.collection.updateOne() actualiza un Documentoindividual.

Ejemplo

Esta operación de actualización en la ColecciónThis ‘users collection’ estableceel actualizar campo ‘status’ con valor ‘reject’ para el primer documentoseleccionado con el filtro en el cual el campo ‘age’ sea menor que 18.

8/18/2019 Traducción Manual MongoDB 3.2

http://slidepdf.com/reader/full/traduccion-manual-mongodb-32 37/37

db.users.updateOne( { age: { $lt: 18 } }, { $set: { status: "reject" } } )

El siguiente diagrama describe los componente de esta operación:

y su equivalencia en SQL: