Salta el contingut
 

Consultes b脿siques

Joan Puigcerver Ib谩帽ez

j.puigcerveribanez@edu.gva.es

Llic猫ncia: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 馃叚

Introducci贸露

MongoDB proprociona una sintaxi per realitzar consultes flexible i potent, per貌 diferent de la que proporciona el llenguatge SQL.

Consultes b脿siques露

Totes les consultes a MongoDB es realitzen mitjan莽ant la crida a la funci贸 find sobre una col路lecci贸.

db.collection.find()

Aquesta funci贸 retorna els 20 primers documents de la col路lecci贸. Si volem veure els seg眉ents 20 documents, podem utilitzar la funci贸 it:

it

Exemple

Consultem tots els documents de la col路lecci贸 llibres:

db.llibres.find()

Filtrar documents露

Podem filtrar els documents que retorna la consulta afegint un objecte amb els criteris com a par脿metre de la funci贸 find:

db.collection.find({ camp: valor })

Exemple

Consultem els llibres de l'autor Irene Sol脿:

db.llibres.find({ autor: 'Irene Sol脿' })

Operadors de comparaci贸露

Podem utilitzar els seg眉ents operadors de comparaci贸 per filtrar els documents:

  • $eq: igual que (equals). Aquest 茅s l'operador per defecte.
  • $ne: diferent de (not equals).
  • $gt: m茅s gran que (greater than).
  • $gte: m茅s gran o igual que (greater than or equals).
  • $lt: m茅s xicotet que (less than).
  • $lte: m茅s xicoteT o igual que (less than or equals).

$eq

La consulta anterior 茅s equivalent a:

db.llibres.find({ autor: { $eq: 'Irene Sol脿' } })

$gt

Consultem els llibres amb m茅s de 200 p脿gines:

db.llibres.find({ nombre_pagines: { $gt: 200 } })

M煤ltiples criteris露

Podem afegir m煤ltiples criteris de filtrat a la consulta, que s'han de complir tots:

db.collection.find({ camp1: valor1, camp2: valor2 })

Exemple

Consultem els llibres de l'autora Sara Mesa amb m茅s de 200 p脿gines:

db.llibres.find({ autor: 'Sara Mesa', nombre_pagines: { $gt: 200 } })

Operadors l貌gics露

Podem utilitzar els seg眉ents operadors l貌gics per combinar criteris de filtrat:

  • $and
  • $or
  • $not

$and

Consultem els llibres de l'autora Sara Mesa amb menys de 200 p脿gines:

db.llibres.find({
$and: [
{ autor: 'Sara Mesa' },
{ nombre_pagines: { $lt: 200 } }
]
})

$not

Consultem els llibres que no s贸n de l'autora Sara Mesa:

db.llibres.find({ autor: { $not: { $eq: 'Sara Mesa' } } })

Operadors amb strings露

MongoDB supporta expressions regulars per filtrar strings:

db.collection.find({ camp: /expressi贸/ })
db.collection.find({ camp: { $regex: 'expressi贸' } })

Exemple

Consultem els llibres que contenen la paraula 'fam铆lia' al resum:

db.llibres.find({ resum: /fam铆lia/ })

Operadors amb arrays露

Podem utilitzar els seg眉ents operadors per filtrar arrays:

  • $in: cont茅 algun dels elements (in).
  • $nin: no cont茅 cap dels elements (not in).
  • $all: cont茅 tots els elements (all).
  • $size: t茅 la mida (size).
  • $elemMatch: cont茅 algun element que compleixi els criteris (element match).

$in

Consultem els llibres que s贸n del g猫nere novel路la o poesia:

db.llibres.find({ genere: { $in: ['novel路la', 'poesia'] } })

$all

Consultem els llibres que s贸n dels g猫neres ci猫ncia-ficci贸 i b猫l路lic:

db.llibres.find({ genere: { $all: ['ci猫ncia-ficci贸', 'b猫l路lic'] } })

$elemMatch

Consultem els llibres que tenen un g猫nere que cont茅 la paraula ficci贸:

db.llibres.find({ genere: { $elemMatch: { $regex: 'ficci贸' } } })

Operadors amb dates露

Podem utilitzar els seg眉ents operadors per filtrar dates:

  • Operadors de comparaci贸: $gt, $gte, $lt, $lte.
  • Operadors de temps: $year, $month, $dayOfMonth, $dayOfWeek.

$gte i $lte

Consultem els llibres publicats entre les dates 2022-06-01 i 2022-12-31:

db.llibres.find({ data_publicacio: { $gte: new Date('2022-06-01'), $lte: new Date('2022-12-31') } })

Ordenaci贸露

Podem ordenar els documents d'una consulta amb la funci贸 sort:

db.collection.find().sort({ camp: 1 })

El valor de l'objecte passat a la funci贸 sort 茅s:

  • 1: ordenaci贸 ascendent (ascendent).
  • -1: ordenaci贸 descendent (descendent).

Es poden ordenar per m煤ltiples camps afegint-los a l'objecte:

db.collection.find().sort({ camp1: 1, camp2: -1 })

Exemple

Consultem els llibres ordenats per data de publicaci贸 de forma descendent:

db.llibres.find().sort({ data_publicacio: -1 })

Selecci贸 de camps露

La funci贸 find accepta un segon par脿metre per seleccionar els camps que volem mostrar:

db.collection.find({}, { camp1: 1, camp2: 1 })
Els valors per seleccionar els camps s贸n:

  • 1: incloure el camp (include).
  • 0: excloure el camp (exclude).

El comportament 茅s el seg眉ent:

  • Si no s'especifica aquest camp, es mostraran tots els camps dels documents.
  • Si s'especifica aquest camp, per defecte sols es mostraran els camps _id i els que s'especifiquen amb el valor 1.

Exemple

Consultem els t铆tols dels llibres de l'autora Sara Mesa sense incloure l'identificador:

db.llibres.find({ autor: 'Sara Mesa' }, { _id: 0, titol: 1 })
[ { titol: 'La familia' }, { titol: 'Un amor' } ]

馃搶 Aquest document pot quedar desactualitzat despr茅s d鈥檌mprimir-lo. Pots consultar la versi贸 m茅s recent a la p脿gina web.
馃尶 Abans d鈥檌mprimir aquest document, considera si 茅s realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.