Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Següent revisió | Revisió prèvia | ||
| info:cursos:mongodbuniversity:m001:cap2 [05/12/2018 05:22] – creat admin | info:cursos:mongodbuniversity:m001:cap2 [14/12/2018 10:21] (actual) – [conexión] mate | ||
|---|---|---|---|
| Línia 18: | Línia 18: | ||
| * modificar path | * modificar path | ||
| - | === conexión | + | === conexión |
| <code bash> | <code bash> | ||
| mongo " | mongo " | ||
| Línia 24: | Línia 24: | ||
| * cluster, le indicamos todos los servers | * cluster, le indicamos todos los servers | ||
| * test es la DB a la que le indicamos que queremos conectar, la iremos cambiando, por ejemplo: 100YWeatherSmall | * test es la DB a la que le indicamos que queremos conectar, la iremos cambiando, por ejemplo: 100YWeatherSmall | ||
| - | * '' | ||
| * '' | * '' | ||
| + | * '' | ||
| * '' | * '' | ||
| + | |||
| + | == Lab2 | ||
| + | * crear cuenta en Atlas | ||
| + | * creación cluster en AWS (free tier) | ||
| + | * settings | ||
| + | * project name: **M001** | ||
| + | * Security | ||
| + | * IP Whitelist -> Allow access from anywhere | ||
| + | * MongoDB Users -> new user | ||
| + | * user: **m001-student** | ||
| + | * pass: **m001-mongodb-basics** | ||
| + | |||
| + | == Connecting to your sandbox cluster from mongo shell | ||
| + | * desde Atlas GUI, Overview -> Connect | ||
| + | * usar mongodb-shell connection< | ||
| + | |||
| + | == Loading data into your sandbox cluster | ||
| + | * '' | ||
| + | * descargar datos de ejemplo y cargar en mi cluster | ||
| + | * '' | ||
| + | {{ : | ||
| + | |||
| + | == Connecting to your sandbox cluster from Compass | ||
| + | * Desde Atlas, y en modo simplificado, | ||
| + | * crear una nueva conexión, guardar como favorito | ||
| + | |||
| + | == Creating Documents | ||
| + | * create documents = inserts | ||
| + | |||
| + | === insertOne() | ||
| + | desde Compass: | ||
| + | * crear nueva colección | ||
| + | * insertar nuevo documento | ||
| + | {{ : | ||
| + | |||
| + | desde mongodb-shell: | ||
| + | * '' | ||
| + | * <code bash> | ||
| + | * creará la colección si esta no existiese | ||
| + | {{ : | ||
| + | |||
| + | * todo documento de una colección ha de tener un identificador único: **_id** | ||
| + | * si nosotros no se lo creamos, se creará por nosotros | ||
| + | * <code bash> | ||
| + | * no conviene mezclar en una colección diferentes tipos de **_id**: | ||
| + | {{ : | ||
| + | |||
| + | === insertMany() | ||
| + | * en lugar de pasar un objeto **{...}** le pasaremos un array **[ {...}, | ||
| + | <code javascript> | ||
| + | db.moviesScratch.insertMany( | ||
| + | [ | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | ] | ||
| + | ); | ||
| + | </ | ||
| + | * por defecto, **insertMany()** trabaja de manera " | ||
| + | * si intentamos introducir 2 documentos con el mismo **_id** dará un error y dejará de insertar documentos. | ||
| + | * si le hemos indicado el **ordered: false**, no insertará aquellos que den errores, pero continuará insertando el resto | ||
| + | {{ : | ||
| + | |||
| + | == Lab 2.2 | ||
| + | |||
| + | == Reading documents: scalar fields | ||
| + | * AND: '' | ||
| + | * OBJECTS: '' | ||
| + | |||
| + | === ejemplo/ | ||
| + | buscar en **movieDetails** cuantas películas han ganado 2 galardones y han tenido 2 nominaciones: | ||
| + | |||
| + | * mongodb shell: '' | ||
| + | * compass: '' | ||
| + | |||
| + | == 2.7 Array Fields | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | == Cursors | ||
| + | * apunta al documento en curso | ||
| + | * en mongoshell, itera 20 resultados... si queremos más, podemos ejecutar '' | ||
| + | |||
| + | == Projections | ||
| + | * límita el número de campos que devuelve | ||
| + | * se usa (¿exclusivo? | ||
| + | * '' | ||
| + | * el **_id** se devuelve por defecto en todas las proyecciones, | ||
| + | * '' | ||
| + | * se pueden especificar campos (con el **0**) que no se quieren mostrar | ||
| + | |||
| + | == UpdateOne() | ||
| + | * primero se aplica un filtro al que aplicar el update | ||
| + | * el primero que cumpla el criterio, será el actualizado | ||
| + | * el segundo argumento especifica que queremos actualizar, a través de **$set** | ||
| + | <code javascript> | ||
| + | title: "The Martian" | ||
| + | }, { | ||
| + | $set: { | ||
| + | poster: " | ||
| + | } | ||
| + | })</ | ||
| + | | ||
| + | la respuesta será:'' | ||
| + | * **acknowledged** indica que se ha ejecutado correctamente | ||
| + | * **matchedCount** indica cuantos registros cumplen el criterio | ||
| + | * **modifiedCount** si se ha modificado o no (en este caso 1 o 0, no puede haber más) | ||
| + | |||
| + | <code javascript> | ||
| + | title: "The Martian" | ||
| + | }, { | ||
| + | $set: { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | })</ | ||
| + | | ||
| + | | ||
| + | == Update Operators | ||
| + | For update operations, update operators specify how to modify specific fields in documents matching a filter. Fields may be added, deleted, or have their value changed in some way. Update operators define what modifications to make with respect to one or more fields in matching documents. | ||
| + | |||
| + | * $set : añade campos | ||
| + | * $unset : elimina campos | ||
| + | * $min | ||
| + | * $max | ||
| + | * $inc : incrementa el valor del campo/ | ||
| + | * $addToSet : añade elementos a un array (si no existen previamente) | ||
| + | * $pop : elimina el primer / último elemento de un array | ||
| + | * $pullAll : elimina los valores que coíncidan | ||
| + | * $pull : elimina el campo que coincida | ||
| + | * $push: añade un array de elementos< | ||
| + | let review = [ | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ].join() | ||
| + | db.movieDetails.updateOne({ | ||
| + | title: "the martian" | ||
| + | },{ | ||
| + | $push: { | ||
| + | reviews: { | ||
| + | rating: 4.5, | ||
| + | reviewer: " | ||
| + | text: review | ||
| + | } | ||
| + | } | ||
| + | }) | ||
| + | </ | ||
| + | el documento ahora tendrá un campo llamado **reviews** del tipo array con un objeto que contendrá los campos indicados (rating, | ||
| + | |||
| + | <code javascript> | ||
| + | let review = [ | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ].join() | ||
| + | db.movieDetails.updateOne({ | ||
| + | title: "the martian" | ||
| + | },{ | ||
| + | $push: { | ||
| + | reviews: | ||
| + | $each: [{ | ||
| + | rating: 4.5, | ||
| + | reviewer: " | ||
| + | text: review | ||
| + | },{ | ||
| + | rating: 4.5, | ||
| + | reviewer: " | ||
| + | text: review | ||
| + | },{ | ||
| + | rating: 4.5, | ||
| + | reviewer: " | ||
| + | text: review | ||
| + | }] | ||
| + | } | ||
| + | } | ||
| + | }) | ||
| + | </ | ||
| + | |||
| + | añade tantos objetos en el array como hay | ||
| + | |||
| + | * ... otros en la página de MongoDB : [[https:// | ||
| + | |||
| + | == UpdateMany() | ||
| + | * modifica todos los documentos que cumplen el registro | ||
| + | <code javascript> | ||
| + | db.movieDetails.updateMany({ | ||
| + | rated: null | ||
| + | },{ | ||
| + | $unset: { | ||
| + | rated: "" | ||
| + | } | ||
| + | }) | ||
| + | </ | ||
| + | elimina el campo rated = null de todos los documentos | ||
| + | |||
| + | == Upserts | ||
| + | * crear nuevos documentos | ||
| + | <code javascript> | ||
| + | let detail={[...]} | ||
| + | |||
| + | db.movieDetails.updateOne({ | ||
| + | " | ||
| + | },{ | ||
| + | $set: detail | ||
| + | },{ | ||
| + | upsert: true | ||
| + | }) | ||
| + | </ | ||
| + | * **detail** contiene todos los campos del documento | ||
| + | * **$set** intenta actualizar el documento | ||
| + | * **upsert=true** inserta si no existe el documento previamente (que cumpla el criterio del primer parámetro) | ||
| + | |||
| + | == 2.14 replaceOne() | ||
| + | * para aplicaciones en las que es más fácil reemplazar todo el documento | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * con todos estos cambios sobre el documento, hacemos un replaceOne() para actualizarlo todo | ||
| + | <code javascript> | ||
| + | db.movieDetails.replaceOne({" | ||
| + | </ | ||
| + | |||
| + | == Delete | ||
| + | * deleteOne() | ||
| + | * deleteMany() | ||
| + | |||
| + | {{ : | ||
| + | {{ : | ||