DAM - DAW - MP 0484 Bases de Dades
Operadors
Els operadors de comparació s'utilitzen en filtres en què, en comptes de passar només un valor, passem un document nou que conté les comparacions a realitzar.
Comparacions
db.inventory.find( { "size.h": { $gt: 14 } } )
db.inventory.find( { "size.h": { $gte: 14 } } )
db.inventory.find( { status: "A", qty: { $lt: 30 } } )
Operadors lògics
db.inventory.find({$or: [ { status: "A" }, { qty: { $gt: 70 } } ] } )
Inici d’un camp en lletra
db.inventory.find( {
status: "A",
$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
Anem a treballar-ho amb els alumnes. Afegim més alumnes i vegem-ho en exemples:
use crud
db.alumnes.remove({})
db.alumnes.insert({Nom:"Joan", Cognoms:"Bosch", Cicle:"DAW", Curs: 1,Moduls:["0483","0484","0485"], estat:"Incomplet"})
db.alumnes.insert({Nom:"Maria", Cognoms:"Cateura", Cicle:"DAW", Curs: 2,Moduls:["0612","0613","0614"], estat:"Incomplet"})
db.alumnes.insert({Nom:"Pere", Cognoms:"Clarós", Cicle:"DAM", Curs: 1,Moduls:["0483","0484","0487"], email:"pere.claros@institutmontilivi.cat"})
db.alumnes.insert({Nom:"Pilar", Cognoms:"Ramos", Cicle:"ASIX", Curs: 2,Moduls:["0374","0377","0378"], telefon:"972123123"})
o bé
use crud
db.alumnes.remove({})
db.alumnes.insertMany([
{Nom:"Joan", Cognoms:"Bosch", Cicle:"DAW", Curs: 1,Moduls:["0483","0484","0485"], estat:"Incomplet"},
{Nom:"Maria", Cognoms:"Cateura", Cicle:"DAW", Curs: 2,Moduls:["0612","0613","0614"], estat:"Incomplet"},
{Nom:"Pere", Cognoms:"Clarós", Cicle:"DAM", Curs: 1,Moduls:["0483","0484","0487"], email:"pere.claros@institutmontilivi.cat"},
{Nom:"Pilar", Cognoms:"Ramos", Cicle:"ASIX", Curs: 2,Moduls:["0374","0377","0378"], telefon:"972123123"}
])
Ara que ja tenim dades provarem les següents comandes:
db.alumnes.find()
db.alumnes.find().count()
db.alumnes.find({},{Cognoms:1})
db.alumnes.find({},{Cognoms:1, Nom:1, _id:0})
db.alumnes.find({Cicle:"ASIX"})
db.alumnes.find({Cicle:"ASIX"},{Cognoms:1, Nom:1, Moduls:1, _id:0})
db.alumnes.find().sort({Cognoms:-1})
db.alumnes.find().limit(2)
db.alumnes.find().limit(2).pretty()
Ajuda del MongoDB en
-
Filtre: Algunes files: Query Your Data — MongoDB Compass
-
Projecció: Algunes columnes: Project Fields to Return from Query — MongoDB Manual
-
Ordenació: Ordenar ascendentment o descendent cursor.sort() — MongoDB Manual
i per a complicar-ho...
db.alumnes.find({Nom: "Pilar" })
db.alumnes.find({Curs: { $gt: 1}})
db.alumnes.find({Nom: { $eq: "Pilar"}})
db.alumnes.find({Nom: { $ne: "Pilar"}})
db.alumnes.find({Nom: { $not: { $eq: "Pilar"}}})
db.alumnes.find({Nom: { $in: [ "Pilar", "Joan" ]}})
db.alumnes.find({$or: [{Nom: {$eq: "Pilar"}},{Nom: {$eq: "Joan"}}]})
db.alumnes.find({Moduls: {$elemMatch: {$eq: "0485" }}})
db.alumnes.find({Moduls: {$elemMatch: {$eq: "0485" }}},{_id:0, Nom:1, Cognoms:1, Moduls:1}).sort({Cognoms:-1})
Operadors d'igualtat/desigualtat
$eq |
$gt |
$lt |
$in |
|---|---|---|---|
$ne |
$gte |
$lte |
$nin |
Explicació dels operadors d'igualtat/desigualtat
| Operador | Descripció |
|---|---|
$eq |
Coincideix amb valors que són iguals a un valor específic |
$ne |
Coincideix amb valors que no són iguals a un valor específic |
$gt |
Coincideix amb valors que són majors que un valor específic |
$gte |
Coincideix amb valors que són majors o iguals a un valor específic |
$lt |
Coincideix amb valors que són menors que un valor específic |
$lte |
Coincideix amb valors que són menors o iguals a un valor específic |
$in |
Coincideix amb algun dels valors específicats en un array |
$nin |
No coincideix amb cap dels valors específicats en un array |
Exemples amb operadors d'igualtat/desigualtat
db.estudiants.find({nom: "Isabel"})
db.estudiants.find({nom: {$eq : "Isabel" }})
db.estudiants.find({edat: {$gt : 22 }})
db.estudiants.find({edat: {$gte : 22 }})
db.estudiants.find({edat: {$lt : 22 }})
db.estudiants.find({edat: {$lte : 22 }})
db.estudiants.find({edat: {$in : [20,25] }})
Operadors lògics
Els operadors lògics permeten realitzar filtres que fan referència a vàries condicions alhora.
$and |
$or |
$not |
$nor |
|---|---|---|---|
Explicació dels operadors lògics
| Operador | Descripció |
|---|---|
$not |
Inverteix l'efecte d'una expressió de consulta. Retorna documents que no coincideixen amb l'expressió de consulta. |
$or |
Uneix clàusules de consulta amb un OR lògic. Retorna tots els documents que coincideixen amb les condicions de qualssevol de les clàusules. |
$and |
Uneix clàusules de consulta amb un AND lògic. Retorna tots els documents que coincideixen amb les condicions de totes de les clàusules. |
$nor |
Uneix clàusules de consulta amb un NOR lògic. Retorna tots els documents que no coincideixen amb cap de les condicions de les clàusules. |
Exemples amb operadors lògics
db.estudiants.find({$or: [ { "edat": {$gte: 25}}, { "edat": {$lte:21}} ]})
db.estudiants.find({$and: [ { "edat": {$gte: 21}}, { "edat": {$lte:25}} ]})
db.estudiants.find({edat: { $not: {$gte: 21}}})
db.estudiants.find({$nor: [ { "edat": {$gte: 25}}, { "edat": {$lte:21}} ]})
Operadors d'element
$exists |
$type |
|---|---|
Explicació dels operadors d'element
| Operador | Descripció |
|---|---|
$exists |
Coincideix amb documents que tenen el camp especificat |
$type |
Selecciona documents si tenen que un camp del tipus especificat |
Exemples amb operadors d'element
db.estudiants.find({ nom: { $exists: true }})
db.estudiants.find({edat: {$type: "int"}})
Operadors d’arrays
$all |
$elemMatch |
$size |
|---|---|---|
Explicació dels operadors d’arrays
| Operador | Descripció |
|---|---|
$all |
Selecciona els documents on el valor d'un camp és una matriu que conté tots els elements especificats. Per especificar una expressió $all, el prototip és el següent:{ <field>: { $all: [ <value1> , <value2> ... ] } } |
$elemMatch |
Selecciona els documents que contenen un camp de matriu amb almenys un element que coincideixi amb tots els criteris de consulta especificats, el prototip és el següent:{ <field>: { $elemMatch: { <query1>, <query2>, ... } } } |
$size |
Selecciona qualsevol matriu amb el nombre d'elements especificat per l'argument, per exempledb.collection.find( { field: { $size: 2 } } ) |
Exemples amb operadors d’arrays
db.estudiants.find({ "aficions" : { $all: ["Futbol"] }})
db.estudiants.find({ "aficions" : { $elemMatch: {$eq: "Cine"} }})
db.estudiants.find({ "aficions" : { $elemMatch: {$ne: "Cine"} }})
db.estudiants.find({ "aficions" : { $size: 1 }})
db.estudiants.find({ "aficions" : { $size: 2 }})
Operadors de consulta d’avaluació
$expr |
$jsonSchema |
$mod |
|---|---|---|
$regex |
$text |
$where |
Explicació dels operadors de consulta d’avaluació
| Operador | Descripció |
|---|---|
$expr |
Permet l'ús d'expressions d'agregació dins del llenguatge de consulta.{ $expr: { <expression> } } |
$jsonSchema |
Valida els documents amb l'esquema JSON donat.{ $jsonSchema: <JSON Schema object> } |
$mod |
Realitza una operació mòdul sobre el valor d'un camp i selecciona documents amb un resultat especificat.{ field: { $mod: [ divisor, remainder ] } } |
$regex |
Selecciona documents on els valors coincideixen amb una expressió regular especificada.{ <field>: { $regex: /pattern/, $options: '<options>' } }{ <field>: { $regex: 'pattern', $options: '<options>' } }{ <field>: { $regex: /pattern/<options> } } |
$text |
Realitza la cerca de text. {$text:{$search: <string>,$language: <string>,$caseSensitive: <boolean>,$diacriticSensitive: <boolean>}} |
$where |
Coincideix amb documents que compleixen una expressió JavaScript. { $where: <string|JavaScript Code> } |
Exemples amb operadors de consulta d’avaluació
db.inventory.find({$expr: { $gt: ["$size.w", "$size.h"] } })
db.inventory.find({$expr: { $gt: ["$size.h", "$size.w"] } })
db.inventory.find({$expr: { $not: { $gte: ["$qty", 50] } } })