3.4.1 - Paràmetres de les funcions find() i findOne()
Les funcions find() i findOne() són absolutament equivalents, amb l'úinca diferència que la primera torna tots els documents trobats, mentre que la segona només torna el primer document trobat.
Per una millor comprensió, utilitzarem únicament find(), per veure tots els resultats obtinguts.
La funció find() s'ha comparat tradicionalment amb la sentència SELECT de SQL. Sempre tornarà un conjunt de documents, que poden variar des de no tornar cap document, a tornar tots els de la col·lecció.
La funció find() pot tenir uns quants paràmetres.
-
El primer indica una condició o criteri, i tornarà aquells documents de la col·lecció que acomplesquen la condició o criteri. Aquesta condició ve donada en forma de document (o objecte) JSON, i és com l'havíem vist en la funció update():
db.col_leccio1.find( { clau1 : valor1 } )
Tornarà tots els documents de la col·lecció col_leccio1 que tinguen el camp clau1 i que en ella tinguen el valor valor1. Aquest criteri pot ser el complicat que faça falta, formant-lo en JSON. En definitiva, tornarà aquells documents que facen matching amb el document del criteri, és a dir, funcionaria com un and
db.col_leccio1.find( { clau1 : valor1 , clau2 : valor2 } )
que tornaria aquells documents de la col_lecció1 que tenen el camp clau1 amb el valor valor1 i que tenen el camp clau2 amb el valor valor2
Si no volem posar cap criteri, per a que els torne tots, no posem res com a paràmetre, o encara millor, li passem un document (objecte) buit, de manera que tots els documents de la col·lecció faran matching amb ell.
db.col_leccio1.find( { } )
Tindrem açò present, sobretot quan ens toque utilitzar el segon paràmetre de find. Si no volem cap criteri, posarem el document buit com l'exemple anterior
-
El segon paràmetre ens servirà per a delimitar els camps dels documents que es visualitzaran. També tindrà el format JSON d'un objecte al qual li posarem com a claus els diferents camps que volem que apareguen o no, i com a valor 1 per a que sí que apareguen i 0 per a que no apareguen.
Si posem algun camp a que sí que aparega (és a dir, amb el valor 1), els únics que apareixeran seran aquestos, a més del_id que per defecte sempre apareix.
> db.alumnes.find({},{nom:1})
{ "_id" : ObjectId("56debe3017bf4ed437dc77c8"), "nom" : "Abel" }
{ "_id" : ObjectId("56dfdbd136d8b095cb6bd57a"), "nom" : "Berta" }Per tant si no volem que aparega _id posarem:
> db.alumnes.find({},{_id:0})
{ "nom" : "Abel", "cognoms" : "Bernat Cantera", "edat" : 22, "adreça" : { "carrer" : "Major", "numero" : 7, "cp" : "12502" }, "nota" : [ 9.5, 9 ] }
{ "nom" : "Berta", "cognoms" : "Bernat Cantero" }I si volem traure únicament el nom:
> db.alumnes.find({},{nom:1,_id:0})
{ "nom" : "Abel" }
{ "nom" : "Berta" }
Per últim, com que a partir d'ara utilitzarem documents més complicats, si volem que ens apareguen els camps que retornem d'una forma un poc més elegant o bonica (pretty), posarem aquesta funció al final: find().pretty()
> db.alumnes.find().pretty()
{
"_id" : ObjectId("56debe3017bf4ed437dc77c8"),
"nom" : "Abel",
"cognoms" : "Bernat Cantera",
"edat" : 22,
"adreça" : {
"carrer" : "Major",
"numero" : 7,
"cp" : "12502"
},
"nota" : [
9.5,
9
]
}
{
"_id" : ObjectId("56dfdbd136d8b095cb6bd57a"),
"nom" : "Berta",
"cognoms" : "Bernat Cantero"
}
Llicenciat sota la Llicència Creative Commons Reconeixement SenseObraDerivada 4.0