Salta el contingut

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

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 exemple
db.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] } } })