Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
info:cursos:mongodbuniversity:m001:cap2 [10/12/2018 13:11] – [Reading documents: scalar fields] mateinfo: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 RS curso
 <code bash> <code bash>
 mongo "mongodb://cluster0-shard-00-00-jxeqq.mongodb.net:27017,cluster0-shard-00-01-jxeqq.mongodb.net:27017,cluster0-shard-00-02-jxeqq.mongodb.net:27017/test?replicaSet=Cluster0-shard-0" --authenticationDatabase admin --ssl --username m001-student --password m001-mongodb-basics mongo "mongodb://cluster0-shard-00-00-jxeqq.mongodb.net:27017,cluster0-shard-00-01-jxeqq.mongodb.net:27017,cluster0-shard-00-02-jxeqq.mongodb.net:27017/test?replicaSet=Cluster0-shard-0" --authenticationDatabase admin --ssl --username m001-student --password m001-mongodb-basics
Línia 32: Línia 32:
   * creación cluster en AWS (free tier)   * creación cluster en AWS (free tier)
   * settings   * settings
-    * project name: *M001*+    * project name: **M001**
   * Security   * Security
     * IP Whitelist -> Allow access from anywhere     * IP Whitelist -> Allow access from anywhere
Línia 47: Línia 47:
   * descargar datos de ejemplo y cargar en mi cluster   * descargar datos de ejemplo y cargar en mi cluster
   * ''load("loadMovieDetailsDataset.js")''   * ''load("loadMovieDetailsDataset.js")''
 +{{ :info:cursos:mongodbuniversity:m001:loadmoviedetailsdataset.zip |}}
  
 == Connecting to your sandbox cluster from Compass == Connecting to your sandbox cluster from Compass
Línia 114: Línia 115:
   * si intentamos introducir 2 documentos con el mismo **_id** dará un error y dejará de insertar documentos.    * 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   * si le hemos indicado el **ordered: false**, no insertará aquellos que den errores, pero continuará insertando el resto
 +{{ :info:cursos:mongodbuniversity:m001:insertmany.zip |}}
  
 == Lab 2.2 == Lab 2.2
Línia 131: Línia 133:
   * ''db.movies.find({cast: "Jeff Bridges"}).pretty()'' : muestra los documentos donde aparece ese actor, aunque no exclusimante y sin tener importancia el orden   * ''db.movies.find({cast: "Jeff Bridges"}).pretty()'' : muestra los documentos donde aparece ese actor, aunque no exclusimante y sin tener importancia el orden
   * ''db.movies.find({"cast.0": "Jeff Bridges"}).pretty()'' : busca el actor en la primera posición del array *cast*   * ''db.movies.find({"cast.0": "Jeff Bridges"}).pretty()'' : busca el actor en la primera posición del array *cast*
 +
 +== Cursors
 +  * apunta al documento en curso
 +  * en mongoshell, itera 20 resultados... si queremos más, podemos ejecutar ''it''
 +
 +== Projections
 +  * límita el número de campos que devuelve
 +  * se usa (¿exclusivo?) como segundo parámetro en ''find()''
 +    * ''db.movies.find({genre: "Action,Adventure"},{title: 1})'' : muestra solo el título
 +    * el **_id** se devuelve por defecto en todas las proyecciones, aunque se puede excluir - como otros campos- si se especifica (con un **0**):
 +    * ''db.movies.find({genre: "Action,Adventure"},{title: 1, _id:0})'' : idem anterior, pero sin el campo **_id**
 +    * 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>db.movieDetails.updateOne({
 +    title: "The Martian"
 +  }, {
 +    $set: {
 +      poster: "http://..."
 +    }
 +  })</code>
 +  
 +la respuesta será:''{"acknowledged": true, "matchedCount": 1, "modifiedCount": 1 }'', donde:
 +  * **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>db.movieDetails.updateOne({
 +    title: "The Martian"
 +  }, {
 +    $set: {
 +      "awards": {
 +        "wins": 8,
 +        "nominations": 14
 +      }
 +    }
 +  })</code>
 +  
 +  
 +== 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/campos en el valor indicado
 +  * $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<code javascript>
 +let review = [
 +  "aadasdsada",
 +  "dsdadasdsadasdsa",
 +  "asdasfeadfsdafasfdsfasdfsda"
 +].join()
 +db.movieDetails.updateOne({
 +  title: "the martian"
 +},{
 +  $push: {
 +    reviews: {
 +      rating: 4.5,
 +      reviewer: "Spencer H.",
 +      text: review
 +    }
 +  }
 +})
 +</code>
 +el documento ahora tendrá un campo llamado **reviews** del tipo array con un objeto que contendrá los campos indicados (rating,reviewer, text)
 +
 +<code javascript>
 +let review = [
 +  "aadasdsada",
 +  "dsdadasdsadasdsa",
 +  "asdasfeadfsdafasfdsfasdfsda"
 +].join()
 +db.movieDetails.updateOne({
 +  title: "the martian"
 +},{
 +  $push: {
 +    reviews:{  
 +      $each: [{
 +        rating: 4.5,
 +        reviewer: "Spencer H.",
 +        text: review
 +      },{
 +        rating: 4.5,
 +        reviewer: "Spencer H.",
 +        text: review
 +      },{
 +        rating: 4.5,
 +        reviewer: "Spencer H.",
 +        text: review
 +      }]
 +    }
 +  }
 +})
 +</code>
 +
 +añade tantos objetos en el array como hay
 +
 +  * ... otros en la página de MongoDB : [[https://docs.mongodb.com/manual/reference/operator/update/]]
 +
 +== UpdateMany()
 +  * modifica todos los documentos que cumplen el registro
 +<code javascript>
 +db.movieDetails.updateMany({
 +  rated: null
 +},{
 +  $unset: {
 +    rated: ""
 +  }
 +})
 +</code>
 +elimina el campo rated = null de todos los documentos
 +
 +== Upserts
 +  * crear nuevos documentos
 +<code javascript>
 +let detail={[...]}
 +
 +db.movieDetails.updateOne({
 +  "imdb.id": detail.imdb.id
 +},{
 +  $set: detail
 +},{
 +  upsert: true
 +})
 +</code>
 +  * **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
 +  * ''detailDoc = db.movieDetails.findOne({"imdb.id": "tt...."});''
 +  * ''detailDoc.poster;'' : printea null, no está definido
 +  * ''detailDoc.poster = "http://....";'' ; añade el campo
 +  * ''detailDoc.genres.push("Documentary");'' este **push** es un método javascript, no el operador visto anteriormente, y añade el valor al array de **genres**
 +  * con todos estos cambios sobre el documento, hacemos un replaceOne() para actualizarlo todo
 +<code javascript>
 +db.movieDetails.replaceOne({"imdb.id": detailDoc.imdb.id}, detailDoc);
 +</code>
 +
 +== Delete
 +  * deleteOne()
 +  * deleteMany()
 +
 +{{ :info:cursos:mongodbuniversity:m001:pasted:20181210-142929.png }}
 +{{ :info:cursos:mongodbuniversity:m001:loadreviewsdataset.zip |}}
  • info/cursos/mongodbuniversity/m001/cap2.1544476280.txt.gz
  • Darrera modificació: 10/12/2018 13:11
  • per mate