Diferència entre revisions de la pàgina «MongoDB»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
Línia 1: Línia 1:
== Introducció ==
+
== Intro No-SQL ==
 +
Algunes característiques:
 +
* Treballem amb documents.
 +
* Ens deixa de preocupar la inconsistència de dades.
 +
* Dades relatives al document incrustades en el mateix (exemple de blog amb post+comment). Això ajuda a mantenir certa consistència.
 +
* No té FKs. En canvi té operacions atòmiques.
 +
* No té transaccions (consistència temporal). Alternatives:
 +
** Reestructurar la nosta BBDD per treballar en un sol tipus de document (schema).
 +
** Implementar-la en el nostre software.
 +
** Tolerar certa inconsistència temporal (dependrà del tipus d'aplicació).
  
 +
<br>
 +
 +
== Primeres passes ==
 
*Instal·lar darrera versió (2.4.8) a Ubuntu:
 
*Instal·lar darrera versió (2.4.8) a Ubuntu:
 
*: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
 
*: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
Línia 9: Línia 21:
 
* Mongo shell permet JavaScript. Creem una col·lecció de dades:
 
* Mongo shell permet JavaScript. Creem una col·lecció de dades:
 
*: > for (i=0;i<1000;i++) { names=["examen","treball","questionari"]; for(j=0;j<3;j++) {db.notes.insert( {"estudiant":i,"tipus": names[j], nota : Math.round(Math.random()*100) }); }}
 
*: > for (i=0;i<1000;i++) { names=["examen","treball","questionari"]; for(j=0;j<3;j++) {db.notes.insert( {"estudiant":i,"tipus": names[j], nota : Math.round(Math.random()*100) }); }}
 
 
 
  
 
*Exemple amb dades:  
 
*Exemple amb dades:  
 
*: https://education.mongodb.com/static/10gen_2013_M101P_November/handouts/grades.ef42a2b3e7ff.js
 
*: https://education.mongodb.com/static/10gen_2013_M101P_November/handouts/grades.ef42a2b3e7ff.js
 
* Importar-lo:<pre>$ mongoimport -d students -c grades < grades.ef42a2b3e7ff.js</pre>
 
* Importar-lo:<pre>$ mongoimport -d students -c grades < grades.ef42a2b3e7ff.js</pre>
*
+
*...
  
 
== CRUD ==
 
== CRUD ==

Revisió del 21:20, 10 des 2013

Intro No-SQL

Algunes característiques:

  • Treballem amb documents.
  • Ens deixa de preocupar la inconsistència de dades.
  • Dades relatives al document incrustades en el mateix (exemple de blog amb post+comment). Això ajuda a mantenir certa consistència.
  • No té FKs. En canvi té operacions atòmiques.
  • No té transaccions (consistència temporal). Alternatives:
    • Reestructurar la nosta BBDD per treballar en un sol tipus de document (schema).
    • Implementar-la en el nostre software.
    • Tolerar certa inconsistència temporal (dependrà del tipus d'aplicació).


Primeres passes

  • Monogo shell:
    $ mongo
  • Seleccionar una db (o crear):
    > use <nom_db>
  • Mongo shell permet JavaScript. Creem una col·lecció de dades:
    > for (i=0;i<1000;i++) { names=["examen","treball","questionari"]; for(j=0;j<3;j++) {db.notes.insert( {"estudiant":i,"tipus": names[j], nota : Math.round(Math.random()*100) }); }}

CRUD

Create Read Update Delete

http://docs.mongodb.org/manual/reference/crud/

Create / Insert / Save

Per crear documents dins d'una col·lecció:

> db.<coleccio>.save( <JSON_obj> )


Read / Select / Find

La operació de query més estàndard en MongoDB és FIND. Alguns exemples:

> db.<coleccio>.findOne()
> db.<coleccio>.findOne( {"tipus":"examen"} )
> db.<coleccio>.find()
> db.<coleccio>.find( {estudiant:103} )

Si ho volem veure una mica més ben formatat:

> db.<col>.find().pretty()

El 2n argument és per seleccionar camps (i excloure):

> db.<col>.find( {"tipus":"examen",nota:50}, {"estudiant":true,"_id":false} )

Operadors: estudiants amb examens amb notes > 90

> db.<col>.find( {"tipus":"examen", nota: {$gt:90} }, {"estudiant":true,"_id":false} )

Estudiants amb notes entre 65 i 71: db.grades.find( {"type":"exam",score: {$gte:65,$lte:71}} ).sort({"score":1})

Altres operadors: http://docs.mongodb.org/manual/reference/operator/query/

TODO: Unir dues queries amb $or...

Ordenar resultats (sort): http://docs.mongodb.org/manual/reference/method/cursor.sort/

Exercicis

...