Vous êtes sur la page 1sur 140

Les bases de données NoSQL : MongoDB

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

elmouelhi.achref@gmail.com

H & H: Research and Training 1 / 101


Plan

1 Introduction
2 Installation
3 Particularités de MongoDB
4 Gestion de base de données
Création
Suppression
Consultation
5 Gestion de collections
Création
Suppression
Consultation

H & H: Research and Training 2 / 101


Plan

6 Gestion de documents
Insertion
Consultation
Insertion multiple
Modification
Opérations sur les tableaux d’un document
7 Opérateurs logiques et de comparaison
Opérateurs de comparaison
Opérateurs logiques
Autres opérateurs
8 Index
9 Agrégations

H & H: Research and Training 3 / 101


Introduction

MongoDB
MongoDB

système de gestion de base de données NoSQL orientée documents

créé en 2007

open-source
H I ©
développé en C++
U EL
O
f E LM
disponibilité de plusieurs fonctionnalités SQL (COUNT, GROUP BY, ORDER BY, SUM...)

r e
possibilité d’accéder aux données via une console JavaScript
ch
©A
des drivers disponibles pour plusieurs langages de programmation (Java, JavaScript,
PHP, Python, Ruby...)

données stockées sous format JSON (JavaScript Object Notation)

SGBD NoSQL le plus populaire en 2017 (et le plus utilisé en France)

utilisé par MTV, Disney, Doodle, Adobe, eBay...

H & H: Research and Training 4 / 101


Introduction

MongoDB

SQL vs MongoDB
Base = Base
Table = Collection
H I ©
EL
Enregistrement (tuple) = Document
M OU
f E
En BDR, tous les tuples d’uneL table ont les mêmes champs (mais
e
chrêtre différentes (les valeurs sont affectées à
les valeurs peuvent
© A
des colonnes)
Dans une collection MongoDB, les documents peuvent ne pas
avoir un champ partagé (pas de colonnes dans un document
MongoDB).

H & H: Research and Training 5 / 101


Installation

MongoDB

Téléchargement, installation et mise en place


Allez sur le lien
H I ©
EL
https://www.mongodb.com/try/download/community
U
(onglet Community server), choisissez la version 4.4.1, msi
O
f E LM
comme Package et Windows comme Plarform.

r e
Installez le fichier téléchargé.
ch
©A
Sous la racine du disque dur (C:\ sous Windows), créez
l’arborescence data\db : c’est l’arborescence par défaut qui sera
cherchée par MongoDB.

H & H: Research and Training 6 / 101


Installation

MongoDB

Ajouter MongoDB au path de Windows

Copiez le chemin absolu du répertoire bin de MongoDB dans


Programmes files
H I ©
U EL ensuite cliquez
Dans la barre de recherche, cherchez Système
Paramètres système avancés
L MO
r
Choisissez Variables e f E
d’environnement ensuite dans
ch
VariablesAutilisateur cliquez sur Nouvelle
©
Saisissez comme nom de variable PATH et comme valeur le
chemin absolu du répertoire bin de MongoDB dans
Programmes files

H & H: Research and Training 7 / 101


Installation

MongoDB

Connexion personnalisée
Ouvrez une console (invite de commandes)
H I ©
EcrLéer n’importe où sur
Créez l’arborescence data/db (on peut la
U
le disque dur)
M-BO
Dans la console, exécutezE
f L
start mongod --port
e
chr cheminDeData/db
numeroPort --dbpath
Cliquez©
A
sur la touche Entrer
Exécutez mongo --port numeroPort

H & H: Research and Training 8 / 101


Installation

MongoDB

(Autres) commandes MongoDB

mongod : démarrer le serveur


H I ©
EL
OU
mongo : démarrer une connexion client
M
f E L une base de données
mongoimport : pour importer
c: h r e
A
mongoexport
©
pour exporter une base de données
...

H & H: Research and Training 9 / 101


Particularités de MongoDB

MongoDB

H I ©
Lister les commandes possibles sur les bases de données
UEL
O
db.help()
f E LM
ch r e
©A

H & H: Research and Training 10 / 101


Particularités de MongoDB

MongoDB

Du JSON au BSON
H I ©
EL
JSON : Binary JSON
M OU
E
MongoDB enregistre toutes
f Lnos données, saisies sous format
h r
JSON, dans le format
c ebinaire BSON.
©A

H & H: Research and Training 11 / 101


Particularités de MongoDB

MongoDB

MongoDB : types de données


Number
H I ©
Boolean
UEL
O
String
f E LM
Array
ch r e
Object ©A
Null

H & H: Research and Training 12 / 101


Gestion de base de données Création

MongoDB
Connexion et création d’une base de données

Après connexion : use nomBD

En se connectant : mongo --port numeroPort nomBD (numéro de port par défaut :


27015)

H I ©
EL
Ou sans préciser le numéro de port : mongo nomBD

O U
f E LM
ch r e
©A

H & H: Research and Training 13 / 101


Gestion de base de données Création

MongoDB
Connexion et création d’une base de données

Après connexion : use nomBD

En se connectant : mongo --port numeroPort nomBD (numéro de port par défaut :


27015)

H I ©
EL
Ou sans préciser le numéro de port : mongo nomBD

O U
f E LM
Remarque
ch r e
©A
Si la base de données n’existe pas, elle sera créée.

H & H: Research and Training 13 / 101


Gestion de base de données Création

MongoDB
Connexion et création d’une base de données

Après connexion : use nomBD

En se connectant : mongo --port numeroPort nomBD (numéro de port par défaut :


27015)

H I ©
EL
Ou sans préciser le numéro de port : mongo nomBD

O U
f E LM
Remarque
ch r e
©A
Si la base de données n’existe pas, elle sera créée.

Exemple de création et d’utilisation d’une base de données ma base


use ma_base

H & H: Research and Training 13 / 101


Gestion de base de données Suppression

MongoDB

Suppression de la base de données courante H I ©


U EL
db.dropDatabase() O
f E LM
ch r e
db.runCommand({dropDatabase: 1})

©A

H & H: Research and Training 14 / 101


Gestion de base de données Consultation

MongoDB

Lister les bases de données existantes


show dbs

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 15 / 101


Gestion de base de données Consultation

MongoDB

Lister les bases de données existantes


show dbs

H I ©
U EL
O
Par défaut
f E LM
r e
ch de données admin, config et local
A
il existe trois bases
©
si on ne se connecte pas à une base de données, on utilise par
défaut une base de données appelée test

H & H: Research and Training 15 / 101


Gestion de collections Création

MongoDB

Rappel

Une collection est l’équivalent d’une table en SQL.


Un document est l’équivalent d’un tuple en SQL.
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 16 / 101


Gestion de collections Création

MongoDB

Rappel

Une collection est l’équivalent d’une table en SQL.


Un document est l’équivalent d’un tuple en SQL.
H I ©
UEL
O
f E LM
Création d’une collection
ch r e
Deux solutions :
©A
Directement : db.createCollection(’adresse’)
En insérant un document : db.personne.insert({nom:
"Wick", prenom: "john"})

H & H: Research and Training 16 / 101


Gestion de collections Suppression

MongoDB

H I ©
Suppression d’une collection
U EL
O
db.nomCollection.drop()
f E LM
ch r e
©A

H & H: Research and Training 17 / 101


Gestion de collections Consultation

MongoDB

Lister les collections existantes


H I ©
show collections, ou
U EL
O
show tables, ou
f E LM
db.getCollectionNames()ch r e
©A

H & H: Research and Training 18 / 101


Gestion de documents Insertion

MongoDB

Remarque

Chaque document possède un id attribué par l’utilisateur ou par MongoDB


(ObjectId). Le champ id constitue l’index de la collection.

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 19 / 101


Gestion de documents Insertion

MongoDB

Remarque

Chaque document possède un id attribué par l’utilisateur ou par MongoDB


(ObjectId). Le champ id constitue l’index de la collection.

H I ©
UEL
O
Ajout d’un document
f E LM
Deux syntaxes :
ch r e
©A
db.nomCollection.insert({clé1: ’val1’, clé2: ’val2’ ... })

ou bien obj=({clé1 :’val1’, clé2: ’val2’ ... }) ensuite


db.nomCollection.save(obj) (save ajoute l’élément s’il n’existe pas,
sinon elle le modifie en écrasant le contenu précédent)

H & H: Research and Training 19 / 101


Gestion de documents Insertion

MongoDB
Exemple avec insert
db.personne.insert(
{
nom: ’wick’,
prenom: ’john’,
age: 45,
sportif: true
H I ©
}
UEL
)
O
f E LM
ch r e
©A

H & H: Research and Training 20 / 101


Gestion de documents Insertion

MongoDB
Exemple avec insert
db.personne.insert(
{
nom: ’wick’,
prenom: ’john’,
age: 45,
sportif: true
H I ©
}
UEL
)
O
f E LM
Exemple avec save
ch r e
db.personne.save(
{
©A
nom: ’wick’,
prenom: ’john’,
age: 45,
sportif: true
}
)

H & H: Research and Training 20 / 101


Gestion de documents Insertion

MongoDB

Exemple en définissant l’objet avant


objet = {
H I ©
nom: ’dalton’,
UEL
prenom: ’jack’, O
niveau: ’master’,
f E LM
}
ch r e
©A
db.personne.save(objet)

H & H: Research and Training 21 / 101


Gestion de documents Insertion

MongoDB

Exemple avec identifiant personnalisé


db.personne.save(
H I ©
EL
{
_id: 10,
O U
nom: ’dalton’,
f E LM
prenom: ’jack’,
niveau: ’master’, ch r e
)
} ©A

H & H: Research and Training 22 / 101


Gestion de documents Insertion

MongoDB

save vs insert
save et insert permettent l’insertion et l’insertion multiple.
H I ©
save ajoute ou modifie un document.
UEL
O
f E LM
insert ajoute seulement de nouveaux documents.

ch r e
save effectue une modification si l’ id spécifié existe dans la
collection.
©A
insert génère une erreur si l’ id spécifié existe dans la
collection.

H & H: Research and Training 23 / 101


Gestion de documents Consultation

MongoDB

H I ©
Pour vérifier que l’ajout a eu lieu
U EL
O
db.nomCollection.find()
f E LM
ch r e
©A

H & H: Research and Training 24 / 101


Gestion de documents Insertion multiple

MongoDB

Pour faire plusieurs insertions au même temps


H I ©
U EL
db.nomCollection.insert( [ {clé1 : ’val1’, clé2 :O
f E LM
’val2’ ... }, {cléN : ’valN’, cléM : ’valM’ ... } ]
)
ch r e
©A

H & H: Research and Training 25 / 101


Gestion de documents Insertion multiple

MongoDB
Exemple

db.personne.insert(
[
{
nom: ’wick’,
H I ©
prenom: ’john’,
age: 45,
U EL
O
LM
sportif: true
},
{
r e f E
ch_id: 12,
©A nom: ’dalton’,
prenom: ’jack’,
niveau: ’master’,
}
]
)

H & H: Research and Training 26 / 101


Gestion de documents Modification

MongoDB

La modification
update() : pour modifier un ou plusieurs documents selon une
ou plusieurs conditions.
H I ©
save() : pour remplacer toutes les valeurs d’un document selon
U EL
O
l’identifiant par les valeurs indiquées dans la méthode. Si

f E LM
l’identifiant n’existe pas il sera ajouté.

ch r e
updateOne() : pour modifier uniquement le premier
©A
enregistrement de la sélection (par défaut).
updateMany() : pour modifier plusieurs documents.
replaceOne() : pour remplacer le premier élément de la
sélection.

H & H: Research and Training 27 / 101


Gestion de documents Modification

MongoDB

La méthode update

H I ©
EL
db.nomCollection.update() prend au moins deux paramètres :

O U
f E LM
le(s) élément(s) concerné(s) par la modification
les modifications
ch r e
©A
quelques options

H & H: Research and Training 28 / 101


Gestion de documents Modification

MongoDB
Exemple

db.personne.update(
{
_id: 12
},
H I ©
{
prenom: ’bill’, U EL
O
LM
}
)
r e f E
ch
©A

H & H: Research and Training 29 / 101


Gestion de documents Modification

MongoDB
Exemple

db.personne.update(
{
_id: 12
},
H I ©
{
prenom: ’bill’, U EL
O
LM
}
)
r e f E
ch
©A
Remarque

Le document ayant l’identifiant 12 a désormais un seul champ (hormis l’identifiant) :


prenom. Les champs nom et niveau ont été supprimés.

H & H: Research and Training 29 / 101


Gestion de documents Modification

Pour modifier, on peut utiliser un des opérateurs suivants

$set : pour modifier la valeur d’un champ

$unset : pour supprimer un champ

$inc : pour incrémenter la valeur d’un champ

H I ©
$mul : pour multiplier l’ancienne valeur d’un champ par la valeur spécifiée

$rename : pour renommer un champ


U EL
O
LM
$min : pour modifier la valeur d’un champ si elle est supérieure à la valeur spécifiée par
min (et inversement pour max)

r e f E
ch
...

©A

H & H: Research and Training 30 / 101


Gestion de documents Modification

Pour modifier, on peut utiliser un des opérateurs suivants

$set : pour modifier la valeur d’un champ

$unset : pour supprimer un champ

$inc : pour incrémenter la valeur d’un champ

H I ©
$mul : pour multiplier l’ancienne valeur d’un champ par la valeur spécifiée

$rename : pour renommer un champ


U EL
O
LM
$min : pour modifier la valeur d’un champ si elle est supérieure à la valeur spécifiée par
min (et inversement pour max)

r e f E
ch
...

©A
Syntaxe

db.nomCollectiondb.update(
{clé1: ’val1’ ... },
{$set: {cléN: ’valN’ ... }}
)

H & H: Research and Training 30 / 101


Gestion de documents Modification

MongoDB
Exemple

db.personne.update(
{
_id: 12
},
{
$set: {
H I ©
prenom: ’peter’,
U EL
nom: ’white’,
O
LM
age: 45

}
}

r e f E
)
ch
©A

H & H: Research and Training 31 / 101


Gestion de documents Modification

MongoDB
Exemple

db.personne.update(
{
_id: 12
},
{
$set: {
H I ©
prenom: ’peter’,
U EL
nom: ’white’,
O
LM
age: 45

}
}

r e f E
)
ch
©A
Constats

Le prenom a été modifié.

Les deux champs nom et age ont été ajoutés.

H & H: Research and Training 31 / 101


Gestion de documents Modification

MongoDB
Exemple avec save
db.personne.save(
{
_id: 12,
prenom: ’james’,
H I ©
nom: ’hamilton’,
U EL
genre: ’h’ O
}
f E LM
)
ch r e
©A

H & H: Research and Training 32 / 101


Gestion de documents Modification

MongoDB
Exemple avec save
db.personne.save(
{
_id: 12,
prenom: ’james’,
H I ©
nom: ’hamilton’,
U EL
genre: ’h’ O
}
f E LM
)
ch r e
©A
Remarque

Les champs existant avant modification non mentionnés dans save


seront supprimés.

H & H: Research and Training 32 / 101


Gestion de documents Modification

MongoDB

La méthode update ne modifie que le premier document qui


remplit la condition
db.personne.update(
{
H I ©
prenom: ’john’
U EL
O
LM
},
{
r e f E
$set: {
ch
} ©A
nom: ’abruzzi’

}
)

H & H: Research and Training 33 / 101


Gestion de documents Modification

MongoDB
Pour modifier tous les documents qui remplissent la condition,
on ajoute le paramètre multi: true
db.personne.update(
{
prenom: ’john’
H I ©
},
U EL
{ O
$set: {
f E LM
nom: ’abruzzi’
ch r e
©A
}
},
{
multi: true
}
)

H & H: Research and Training 34 / 101


Gestion de documents Modification

MongoDB

Ou en utilisant updateMany
db.personne.updateMany(
{
H I ©
EL
prenom: ’john’
},
O U
{
f E LM
$set: {
nom: ’abruzzi’ch r e
}
} ©A
)

H & H: Research and Training 35 / 101


Gestion de documents Modification

MongoDB

Si aucun document ne remplit la condition de update, aucun


changement ne sera effectué
db.personne.update(
{
H I ©
prenom: ’steven’
U EL
O
LM
},
{
r e f E
$set: {
ch
} ©A
nom: ’segal’

},
)

H & H: Research and Training 36 / 101


Gestion de documents Modification

MongoDB
On peut effectuer une insertion avec update si aucun document
ne remplit la condition en ajoutant upsert: true
db.personne.update(
{
prenom: ’steven’
H I ©
},
U EL
{ O
$set: {
f E LM
nom: ’segal’
ch r e
©A
}
},
{
upsert: true
}
)

H & H: Research and Training 37 / 101


Gestion de documents Modification

MongoDB
Et si on veut supprimer un champ d’un document

db.personne.update({nom: "bob"}, {$unset:{prenom:1}})

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 38 / 101


Gestion de documents Modification

MongoDB
Et si on veut supprimer un champ d’un document

db.personne.update({nom: "bob"}, {$unset:{prenom:1}})

H I ©
U EL
O
Explication
f E LM
ch r e
On commence par sélectionner les documents dont le champ nom

©A
contient comme valeur bob
Si on ne précise aucun critère de sélection, le premier document
de la collection personne sera concerné par la modification
Pour ce(s) document(s), on supprimera le champ prenom s’il
existe.

H & H: Research and Training 38 / 101


Gestion de documents Modification

MongoDB

Et si on veut incrémenter un champ d’un document

db.personne.update({nom: "bob"}, {$inc:{age:20}})

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 39 / 101


Gestion de documents Modification

MongoDB

Et si on veut incrémenter un champ d’un document

db.personne.update({nom: "bob"}, {$inc:{age:20}})

H I ©
U EL
Explication O
f E LM
ch r e
On commence par sélectionner les documents dont le champ nom

©A
contient comme valeur bob
Si on ne précise aucun critère de sélection, le premier document
de la collection personne sera concerné par la modification
Pour ce(s) document(s), on incrémentera de 20 l’age pour s’il
existe. Sinon, le champ age sera créé avec la valeur 20.

H & H: Research and Training 39 / 101


Gestion de documents Modification

MongoDB

On peut aussi faire plusieurs modifications avec une seule requête

db.personne.update({nom: "bob"}, {$inc:{age:20},


$unset:{prenom:1} })
H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 40 / 101


Gestion de documents Modification

MongoDB

On peut aussi faire plusieurs modifications avec une seule requête

db.personne.update({nom: "bob"}, {$inc:{age:20},


$unset:{prenom:1} })
H I ©
U EL
O
f E LM
Explication
ch r e
©A
Avec cette requête, on incrémente l’age et on supprime le champ
prenom pour le premier document ayant un champ nom qui a comme
valeur bob

H & H: Research and Training 40 / 101


Gestion de documents Modification

MongoDB

Et si on veut renommer un champ

db.personne.updateMany( {}, { $rename: { nom: ’name’


} } )
H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 41 / 101


Gestion de documents Modification

MongoDB

Et si on veut renommer un champ

db.personne.updateMany( {}, { $rename: { nom: ’name’


} } )
H I ©
U EL
O
f E LM
Explication ch r e
©A
On commence par sélectionner tous les documents
Pour ces documents, le champ nom sera renommé name

H & H: Research and Training 41 / 101


Gestion de documents Modification

MongoDB

Supprimer un document

db.personne.remove({nom: "bob"})
H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 42 / 101


Gestion de documents Modification

MongoDB

Supprimer un document

db.personne.remove({nom: "bob"})
H I ©
U EL
O
Explication f E LM
ch r e
©A
On commence par sélectionner les documents dont le champ nom
contient comme valeur bob
Ensuite tous ces documents seront supprimés

H & H: Research and Training 42 / 101


Gestion de documents Modification

MongoDB

H I ©
EL
On peut également utiliser
deleteOne() O U
f E LM
deleteMany()
ch r e
©A

H & H: Research and Training 43 / 101


Gestion de documents Modification

MongoDB

Récupérer tous les documents d’une collection


db.personne.find()
H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 44 / 101


Gestion de documents Modification

MongoDB

Récupérer tous les documents d’une collection


db.personne.find()
H I ©
EL
Rechercher selon des critères
M OU
f E L "bob" ...
db.personne.find({nom: })
chr e
© A

H & H: Research and Training 44 / 101


Gestion de documents Modification

MongoDB

Récupérer tous les documents d’une collection


db.personne.find()
H I ©
EL
Rechercher selon des critères
M OU
f
db.personne.find({nom:E L "bob" ... })
chr e
A
© de documents
Compter le nombre

db.personne.find({nom: "bob" ... }).count()

H & H: Research and Training 44 / 101


Gestion de documents Modification

MongoDB

Trier le résultat de recherche dans l’ordre croissant


db.personne.find().sort({name: 1}) H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 45 / 101


Gestion de documents Modification

MongoDB

Trier le résultat de recherche dans l’ordre croissant


db.personne.find().sort({name: 1}) H I ©
U EL
O
f E LM
r e
ch dans l’ordre décroissant
Trier le résultat de recherche
© A
db.personne.find().sort({name: -1})

H & H: Research and Training 45 / 101


Gestion de documents Modification

MongoDB

Sauter quelques documents (ne pas les afficher)


db.personne.find().skip(2)

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 46 / 101


Gestion de documents Modification

MongoDB

Sauter quelques documents (ne pas les afficher)


db.personne.find().skip(2)

Limiter le nombre de documents à afficher


H I ©
U EL
db.personne.find().limit(2)
O
f E LM
ch r e
©A

H & H: Research and Training 46 / 101


Gestion de documents Modification

MongoDB

Sauter quelques documents (ne pas les afficher)


db.personne.find().skip(2)

Limiter le nombre de documents à afficher


H I ©
U EL
db.personne.find().limit(2)
O
f E LM
ch r e
Trier et limiter le nombre de documents à afficher
©A
db.personne.find().sort({name: -1}).limit(2)

H & H: Research and Training 46 / 101


Gestion de documents Modification

MongoDB

Sauter quelques documents (ne pas les afficher)


db.personne.find().skip(2)

Limiter le nombre de documents à afficher


H I ©
U EL
db.personne.find().limit(2)
O
f E LM
ch r e
Trier et limiter le nombre de documents à afficher
©A
db.personne.find().sort({name: -1}).limit(2)

Afficher seulement le premier document


db.personne.findOne()

H & H: Research and Training 46 / 101


Gestion de documents Modification

MongoDB

Afficher le résultat au format JSON


db.personne.find().pretty();

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 47 / 101


Gestion de documents Modification

MongoDB

Afficher le résultat au format JSON


db.personne.find().pretty();

Et si on veut seulement afficher quelques champs


H I ©
EL
db.personne.find({},{nom:1})
M OU
f E
ça affiche le nom de toutes L personnes ainsi que leurs
les
e
chr affiché automatiquement)
identifiants (qui sera
© A

H & H: Research and Training 47 / 101


Gestion de documents Modification

MongoDB

Afficher le résultat au format JSON


db.personne.find().pretty();

Et si on veut seulement afficher quelques champs


H I ©
EL
db.personne.find({},{nom:1})
M OU
f E
ça affiche le nom de toutes L personnes ainsi que leurs
les
e
chr affiché automatiquement)
identifiants (qui sera
© A
Et si on ne veut pas afficher les id

db.personne.find({},{nom:1, id: 0 })

H & H: Research and Training 47 / 101


Gestion de documents Modification

MongoDB

Appeler une fonction pour chaque document de la sélection


db.personne.find().forEach(
function(perso){
print(perso.nom +" "+ perso.prenom);
H I ©
}
U EL
O
LM
);

r e f E
ch
©A

H & H: Research and Training 48 / 101


Gestion de documents Modification

MongoDB

Appeler une fonction pour chaque document de la sélection


db.personne.find().forEach(
function(perso){
print(perso.nom +" "+ perso.prenom);
H I ©
}
U EL
O
LM
);

r e f E
ch
©A
Explication

Pour chaque document de la sélection (forEach), on appelle une


fonction qui affiche le nom et le prénom.

H & H: Research and Training 48 / 101


Gestion de documents Modification

MongoDB

Peut-on utiliser les expression régulières ?


chercher les personnes dont le nom commence par w :
H I ©
db.personne.find({name:/∧w/})
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 49 / 101


Gestion de documents Modification

MongoDB

Peut-on utiliser les expression régulières ?


chercher les personnes dont le nom commence par w :
H I ©
db.personne.find({name:/∧w/})
U EL
O
f E LM
Explication
ch r e
©A
les deux / pour indiquer le début et la fin de l’expression régulière
∧ pour indiquer par quoi commence le mot cherché

H & H: Research and Training 49 / 101


Gestion de documents Modification

MongoDB

chercher les personnes dont le nom se termine par k :

db.personne.find({name:/k$/})

H I ©
U
chercher les personnes dont le nom commence
L e ou par h :
Epar
L MO
r e f E
db.personne.find({name:/∧[eh]/})

chercher les© Ach dont le nom commence par une lettre


personnes
comprise entre e et w :

db.personne.find({name:/∧[e-w]/})

H & H: Research and Training 50 / 101


Gestion de documents Modification

MongoDB

Autres symboles utilisés en ER

x? : pour indiquer que la lettre x est facultative. Elle peut y être 0


ou 1 fois.

H I ©
EL
x+ : pour indiquer que la lettre x est obligatoire. Elle peut y être 1
ou plusieurs fois.
M OU
EL x est facultative. Elle peut y être 0,
x* : pour indiquer que la lettre
1 ou plusieurs fois. ref
x{2,4}©
Ach
: pour indiquer que la lettre x doit se répéter au moins
deux fois et au plus 4 fois.
. : un caractère quelconque
| : le ou logique

H & H: Research and Training 51 / 101


Gestion de documents Modification

MongoDB

On peut aussi utiliser $regex

H I ©
db.employes.find({prenom: { $regex: /john/}})
EL
M OU
E L é à la casse avec $options
On peut aussi désactiver la sensibilit
f
chr e
A
db.employes.find({prenom:
© ’i’ }})
$options:
{ $regex: /john/,

H & H: Research and Training 52 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB
Listes des opérations
$push : pour ajouter un élément au tableau
$pop : pour supprimer le premier ou le dernier élément d’un
tableau
H I ©
$pull : pour supprimer une ou plusieurs valeurs d’un tableau
U EL
O
LM
$pullAll : pour supprimer tous les éléments d’un tableau

r e f E
$position : à utiliser avec push pour indiquer la position
ch
©A
d’insertion dans un tableau
$slice : à utiliser avec push pour préciser les éléments à garder
dans un tableau
$sort : à utiliser avec push pour ordonner les éléments d’un
tableau
...
H & H: Research and Training 53 / 101
Gestion de documents Opérations sur les tableaux d’un document

MongoDB

H I ©
Considérons le document suivant :
U EL
O
LM
db.personne.insert({ id : 5, nom : ’wick’,

r e f E
sport: [ ’foot’, ’hand’, ’tennis’] })

ch
©A

H & H: Research and Training 54 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Ajouter un nouveau sport au tableau

db.personne.update( { id: 5 }, { $push: {


"sport": "basket" } } )
H I ©
U EL
M O
f E Lavec une seule requête ? Ainsi :
Comment ajouter plusieurs sports

c h
db.personne.update(re { id: 5 }, { $push: { sport:
©A
[’hockey’,’sky’] } } )

H & H: Research and Training 55 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Ajouter un nouveau sport au tableau

db.personne.update( { id: 5 }, { $push: {


"sport": "basket" } } )
H I ©
U EL
M O
f E Lavec une seule requête ? Ainsi :
Comment ajouter plusieurs sports

c h
db.personne.update(re { id: 5 }, { $push: { sport:
©A
[’hockey’,’sky’] } } )

Non, ça rajoute un tableau dans notre tableau

H & H: Research and Training 55 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Ou comme-ça ?
H I ©
U EL { sport:
db.personne.update( { id: 5 }, { $push:
{’hockey’,’sky’} } } )
L MO
r e f E
A ch
©

H & H: Research and Training 56 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Ou comme-ça ?
H I ©
U
db.personne.update( { id: 5 }, { $push: EL { sport:
{’hockey’,’sky’} } } )
L MO
r e f E
h
Non, ça génère unecerreur
A
©

H & H: Research and Training 56 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Solution
db.personne.update( { id: 5 }, { $push: {
H I ©
"sport": { $each: [’basket’,’sky’] } } } )
U EL
O
f E LM
Remarque
ch r e
©A
$push : ajoute naturellement l’élément après le dernier élément
du tableau

H & H: Research and Training 57 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Et si on veut ajouter un élément à une position précise

db.personne.update( { id: 5 }, { $push: {


"sport": { $each: [’volley’], $position: 2 } } }
H I ©
)
U EL
O
f E LM
Explication
ch r e
©A
Ceci rajoute l’élément volley à la position 2 du tableau sport
(la première position est d’indice 0)
Les autres éléments seront décalés

H & H: Research and Training 58 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Comment supprimer le premier élément d’un tableau ?

db.personne.update( { id: 5 }, { $pop: { sport:


-1 } } )

H I ©
U EL ?
Comment supprimer le dernier élément d’un tableau

db.personne.update( {Lid: MO 5 }, { $pop: { sport:


1 } } ) re f E
c h
©A
Comment supprimer un élément quelconque d’un tableau ?

db.personne.update( { id: 5 }, { $pull: {


"sport": "foot" } } ) : supprime l’élément foot du tableau
sport

H & H: Research and Training 59 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

H I ©
Comment supprimer plusieurs éléments avec une seule requête ?
U EL
O
LM
db.personne.update( { id: 5 }, { $pull: { sport:

r e f E
{ $in: [’hockey’,’basket’] } } } )

ch
©A

H & H: Research and Training 60 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Considérons le document créé de la façon suivante :


H I ©
db.personne.insert({
U EL
_id : 6,
O
nom : ’wick’,
f E LM
r e
sport : [ ’foot’, ’hand’, ’tennis’]
ch
©A
})

H & H: Research and Training 61 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Si on exécute
db.personne.update(
{ _id: 6 },
H I ©
{$push: {
U EL
O
LM
sport: {

r e f E
$each: [ ’hockey’, ’sky’, ’volley’ ],
$slice: -5
ch
}
}
©A
})

H & H: Research and Training 62 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB
Ensuite
db.personne.find({_id:6}).pretty();

Le résultat sera :
H I ©
EL
{
"_id" : 6,
O U
"nom" : "wick",
f E LM
"sport" : [
"hand", ch r e
©A
"tennis",
"hockey",
"sky",
"volley"
]
}
H & H: Research and Training 63 / 101
Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Considérons le document créé de la façon suivante :


H I ©
db.personne.insert({
U EL
_id : 7,
O
nom : ’wick’,
f E LM
r e
sport : [ ’foot’, ’hand’, ’tennis’]
ch
©A
})

H & H: Research and Training 64 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Si on exécute
db.personne.update(
{ _id: 7 },
H I ©
{$push: {
U EL
O
LM
sport: {

r e f E
$each: [ ’hockey’, ’sky’, ’volley’ ],
$slice: 5
ch
}
}
©A
})

H & H: Research and Training 65 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB
Ensuite
db.personne.find({_id:7}).pretty();

Le résultat sera :
H I ©
EL
{
"_id" : 7,
O U
"nom" : "wick",
f E LM
"sport" : [
"foot", ch r e
"hand",©A
"tennis",
"hockey",
"sky"
]
}
H & H: Research and Training 66 / 101
Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Considérons le document créé de la façon suivante :


H I ©
db.personne.insert({
U EL
_id : 8,
O
nom : ’wick’,
f E LM
sport : [’hand’, ’foot’,
ch r e ’tennis’]

©A
})

H & H: Research and Training 67 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Si on exécute
db.personne.update(
{ _id: 8 },
H I ©
{$push: {
U EL
O
LM
sport: {

r e f E
$each: [’sky’, ’volley’ , ’hockey’],
$sort: 1
ch
}
}
©A
})

H & H: Research and Training 68 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB
Ensuite
db.personne.find({_id:8}).pretty();

Le résultat sera :
{ H I ©
"_id" : 8,
U EL
O
"nom" : "wick",
"sport" : [
f E LM
"foot",
ch r e
"hand",
©A
"hockey",
"tennis",
"sky",
"volley"
]
}
H & H: Research and Training 69 / 101
Gestion de documents Opérations sur les tableaux d’un document

MongoDB

H I ©
Pour trier dans l’ordre décroissant
U EL
O
$sort: -1
f E LM
ch r e
©A

H & H: Research and Training 70 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Et quand il s’agit d’un tableau d’objet ?


Considérons le document suivant :
db.personne.insert({ H I ©
_id : 10,
U EL
O
nom : ’wick’,
notes: [
f E LM
ch r e
{’programmation’: 17, ’coefficient’: 4},

]
©A
{’OS’: 10, ’coefficient’: 2}

})

H & H: Research and Training 71 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Comment ajouter un nouvel élément au tableau ?


db.personne.update(
{ _id: 10 },
H I ©
{ $push:
U EL
O
LM
{ notes :

r e f E
{’compilation’: 15, ’

ch
coefficient’: 1}

}
}
©A
)

H & H: Research and Training 72 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Et pour supprimer ?
db.personne.update(
H I ©
EL
{ _id: 10 },
{ $pull:
O U
{ notes :
f E LM
} ch r e
{’compilation’: 15, ’coefficient’: 1}

)
} ©A

H & H: Research and Training 73 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Considérons le document suivant :


db.personne.insert({
_id : 11,
H I ©
nom : ’wick’,
U EL
O
LM
notes: [

r e f E
{’programmation’: 17, ’coefficient’: 4,
optionnel: false},
ch
] ©A
{’OS’: 10, ’coefficient’: 2}

})

H & H: Research and Training 74 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Que fait la requête de suppression suivante ?


db.personne.update(
{ _id: 11 },
{ $pull:
H I ©
{ notes :
U EL
O
LM
{’programmation’: 17, ’coefficient’: 4}
}
r e f E
}
ch
)
©A

H & H: Research and Training 75 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Que fait la requête de suppression suivante ?


db.personne.update(
{ _id: 11 },
{ $pull:
H I ©
{ notes :
U EL
O
LM
{’programmation’: 17, ’coefficient’: 4}
}
r e f E
}
ch
)
©A
Elle supprime quand-même l’objet même s’il n’y pas de
correspondance complète

H & H: Research and Training 75 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB
Comment faire pour éviter cette problématique ?
db.personne.update(
{ _id: 11 },
{ $pull: {
H I ©
EL
notes : {
$elemMatch:
O U
4} f E LM
{’programmation’: 17, ’coefficient’:

}
ch r e
} )
} ©A

H & H: Research and Training 76 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB
Comment faire pour éviter cette problématique ?
db.personne.update(
{ _id: 11 },
{ $pull: {
H I ©
EL
notes : {
$elemMatch:
O U
4} f E LM
{’programmation’: 17, ’coefficient’:

}
ch r e
} )
} ©A

Cette fois-ci, ça ne supprime pas l’objet car l’attribut optionnel:


true n’a pas été précisé
H & H: Research and Training 76 / 101
Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Pour chercher un document selon une valeur dans son tableau d’objet
db.personne.find(
H I ©
EL
{"notes.programmation":
{$ne:17}
O U
)
}
f E LM
ch r e
©A

H & H: Research and Training 77 / 101


Gestion de documents Opérations sur les tableaux d’un document

MongoDB

Pour chercher un document selon une valeur dans son tableau d’objet
db.personne.find(
H I ©
EL
{"notes.programmation":
{$ne:17}
O U
)
}
f E LM
ch r e
© A
Cela permet de chercher toutes les personnes dont la note en
programmation est différente de 17.

H & H: Research and Training 77 / 101


Opérateurs logiques et de comparaison

MongoDB

Comme pour les bases de données relationnelles


H I ©
opérateurs de comparaison UEL
O
opérateurs logiques
f E LM
... ch r e
©A

H & H: Research and Training 78 / 101


Opérateurs logiques et de comparaison Opérateurs de comparaison

MongoDB

Commençons par créer la collection suivante (etudiant) :

H I ©
{"_id" : 1, "nom" : "wick", "notes": [10, 15, 12], "age" : 19 }
U EL
O
f E LM
{"_id" : 2, "nom" : "bob", "notes": [18, 8, 12], "age" : 35 }

ch r e
{"_id" : 3, "nom" : "wolf", "notes": [7, 6, 13], "age" : 25 }

©A
{"_id" : 4, "nom" : "green", "notes": [18, 16, 9], "age" : 22 }

H & H: Research and Training 79 / 101


Opérateurs logiques et de comparaison Opérateurs de comparaison

MongoDB

Comment sélectionner les étudiants âgés de plus de 30 ans


db.etudiant.find({"age":{$gt:20}})
H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 80 / 101


Opérateurs logiques et de comparaison Opérateurs de comparaison

MongoDB

Comment sélectionner les étudiants âgés de plus de 30 ans


db.etudiant.find({"age":{$gt:20}})
H I ©
U EL
O
f E LM
ch r e
{"_id" : 2, "nom" : "bob", "notes": [18, 8, 12], "age" : 35 }

©A
{"_id" : 3, "nom" : "wolf", "notes": [7, 6, 13], "age" : 25 }

{"_id" : 4, "nom" : "green", "notes": [18, 16, 9], "age" : 22 }

H & H: Research and Training 80 / 101


Opérateurs logiques et de comparaison Opérateurs de comparaison

MongoDB

Les opérateurs de comparaison

$gt : greater than (supérieur à)


$gte : greater than or equal (supérieur ou égal)
H I ©
$lt : less than (inférieur à) U EL
$lte : less than or equal (infL M O
e f E érieur ou égal)

c h
$eq : equal (égal à)r
A
©equal
$ne : not (différent de )
$in : dans (un tableau...)
$nin : not in (pas dans)

H & H: Research and Training 81 / 101


Opérateurs logiques et de comparaison Opérateurs logiques

MongoDB
Comment sélectionner les étudiants dont l’age est entre 30 et 40 ans
db.etudiant.find(
{$and:
[
{ age:{$gte:20}}, H I ©
{ age:{$lte:30}}
U EL
O
}
]
f E LM
)
ch r e
©A

H & H: Research and Training 82 / 101


Opérateurs logiques et de comparaison Opérateurs logiques

MongoDB
Comment sélectionner les étudiants dont l’age est entre 30 et 40 ans
db.etudiant.find(
{$and:
[
{ age:{$gte:20}}, H I ©
{ age:{$lte:30}}
U EL
O
}
]
f E LM
)
ch r e
©A
{"_id" : 1, "nom" : "wick", "notes": [10, 15, 12], "age" : 19 }

{"_id" : 3, "nom" : "wolf", "notes": [7, 6, 13], "age" : 25 }

{"_id" : 4, "nom" : "green", "notes": [18, 16, 9], "age" : 22 }


H & H: Research and Training 82 / 101
Opérateurs logiques et de comparaison Opérateurs logiques

MongoDB

Les opérateurs logiques


H I ©
$and : et
U EL
O
$or : ou
f E LM
$not : le non logique
ch r e
©A
$nor : ou exclusif

H & H: Research and Training 83 / 101


Opérateurs logiques et de comparaison Autres opérateurs

MongoDB
Afficher les personnes dont le champ name existe
db.personne.find(
{name:
{$exists:true}
H I ©
EL
}
)
O U
f E LM
ch r e
©A

H & H: Research and Training 84 / 101


Opérateurs logiques et de comparaison Autres opérateurs

MongoDB
Afficher les personnes dont le champ name existe
db.personne.find(
{name:
{$exists:true}
H I ©
EL
}
)
O U
f E LM
ch r e
Afficher les personnes dont l’age est divisible par 5
db.etudiant.find( ©A
{ age:
{ $mod: [ 5, 0 ] }
}
)

H & H: Research and Training 84 / 101


Index

MongoDB

C’est quoi ? et pourquoi ?

H I ©
EL
Si on a un champ (autre que id) selon lequel on effectue des
recherches très fréquemment
M OU
E
Pour accélérer la recherche,
f Lon peut créer un index sur ce champ
Par défaut, on c
e
hrindex sur chaque id d’une collection (et il est
A a un
© de le supprimer)
impossible

H & H: Research and Training 85 / 101


Index

MongoDB

Pour consulter la liste d’index sur la collection personne


db.personne.getIndexes(); ça affiche :
[
H I ©
EL
{
"v" : 2,
O U
"key" : {
f ELM
ch
},r e "_id" : 1

©A "name" : "_id_",
"ns" : "test.personne"
}
]

H & H: Research and Training 86 / 101


Index

MongoDB

Pour créer un nouvel index sur le champ nom


db.personne.ensureIndex(nom:1); ça affiche :
H I ©
{
UEL
O
LM
"createdCollectionAutomatically" : false,

r e f E
"numIndexesBefore" : 1,

ch
"numIndexesAfter" : 2,

} ©A
"ok" : 1

H & H: Research and Training 87 / 101


Index

MongoDB
On peut consulter une nouvelle fois la liste d’index
db.personne.getIndexes(); ça affiche :

[
{
"v" : 2,
"key" : {
H I ©
"_id" : 1
UEL
},
O
f E LM
"name" : "_id_",

},
ch r e
"ns" : "test.personne"

{
© A"v" : 2,
"key" : {
"nom" : 1
},
"name" : "nom_1",
"ns" : "test.personne"
}
]
H & H: Research and Training 88 / 101
Index

MongoDB
Pour supprimer un index sur le champ nom
db.personne.dropIndex(nom:1)

On vérifie
db.personne.getIndexes(); ça affiche :
H I ©
[ EL
{
M OU
"v" : 2,L
r e f E
A c h
"key" : {
"_id" : 1
© },
"name" : "_id_",
"ns" : "test.personne"
}
]

H & H: Research and Training 89 / 101


Agrégations

MongoDB

C’est quoi ? et pourquoi ?


H I ©
U
C’est une requête qui retourne un résultat L forme d’un
Esous
tableau
L MO
e
ça permet d’utiliserrdesf E
fonctions d’agrégations comme en SQL
A ch
©

H & H: Research and Training 90 / 101


Agrégations

MongoDB
Exemple
db.etudiant.aggregate(
[
{$project:
{
_id: "$nom",
H I ©
UEL
moyenne: {$avg: "$notes"}
O
LM
}

]);
}
r e f E
ch
©A

H & H: Research and Training 91 / 101


Agrégations

MongoDB
Exemple
db.etudiant.aggregate(
[
{$project:
{
_id: "$nom",
H I ©
UEL
moyenne: {$avg: "$notes"}
O
LM
}

]);
}
r e f E
ch
Le résultat ©A
{ "_id" : "wick", "moyenne" : 12.333333333333334 }
{ "_id" : "bob", "moyenne" : 12.666666666666666 }
{ "_id" : "wolf", "moyenne" : 8.666666666666666 }
{ "_id" : "green", "moyenne" : 14.333333333333334 }

H & H: Research and Training 91 / 101


Agrégations

MongoDB

Explication
H I ©
$project : est un pipeline d’agrégation U ELpermet de remodeler
qui
une collection
L MO
e
ça permet d’utiliserrdesf E
opérateurs d’agrégations comme en SQL
A ch
©

H & H: Research and Training 92 / 101


Agrégations

MongoDB
Autres pipelines d’agrégation
$group : Permet de regrouper des documents comme un group
by en SQL

I ©
$out : Permet de créer une nouvelle collection à partir d’une
H
autre qui existe déjà
U EL
O
f E
documents que d’élément. LM
$unwind : Permet de décomposer un tableau en autant de

r e
chde filtrer les documents selon la condition
A
$match : Permet
©
spécifiée
$sample : Permet de sélectionner aléatoirement un nombre de
documents spécifiée dans la requête
...

H & H: Research and Training 93 / 101


Agrégations

MongoDB

Autres opérateurs d’agrégation


$max, $min, $sum, $sqrt, $pow, $floor, $divide, $abs ...
$ifNull
H I ©
EL
$map, $reduce
M OU
f E L
$arrayToObject, $dateFromString, $dateToString...
r e
ch$size...
A
$split, $slice,
©
$substr, $toUpper, $toLower, $concat
...

H & H: Research and Training 94 / 101


Agrégations

MongoDB

Exemple avec sample


db.etudiant.aggregate(
[
H I ©
{ $sample:
UEL
O
LM
{ size: 3 }
}
r e f E
ch
]

©A

H & H: Research and Training 95 / 101


Agrégations

MongoDB

Exemple avec sample


db.etudiant.aggregate(
[
H I ©
{ $sample:
UEL
O
LM
{ size: 3 }
}
r e f E
ch
]

©A
Le résultat
Il choisit aléatoirement trois documents de la collection

H & H: Research and Training 95 / 101


Agrégations

MongoDB
Exemple avec unwind

db.etudiant.aggregate(
[
{ $unwind : "$notes" }
]);

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 96 / 101


Agrégations

MongoDB
Exemple avec unwind

db.etudiant.aggregate(
[
{ $unwind : "$notes" }
]);

H I ©
Le résultat
U EL
O
LM
{ "_id" : 1, "nom" : "wick", "notes" : 10, "age" : 19 }
{
{
"_id"
"_id"
:
:
1,
1,
"nom"
"nom"
:
:
r e E
"wick", "notes" : 15, "age" : 19 }
f
"wick", "notes" : 12, "age" : 19 }
{ "_id" : 2, "nom"
ch
: "bob", "notes" : 18, "age" : 25 }
{
{
{
"_id"
"_id"
"_id"
:
:
:
2,
2,
3,
©A
"nom"
"nom"
"nom"
:
:
:
"bob", "notes" : 8, "age" : 25 }
"bob", "notes" : 12, "age" : 25 }
"wolf", "notes" : 7, "age" : 35 }
{ "_id" : 3, "nom" : "wolf", "notes" : 6, "age" : 35 }
{ "_id" : 3, "nom" : "wolf", "notes" : 13, "age" : 35 }
{ "_id" : 4, "nom" : "green", "notes" : 18, "age" : 22 }
{ "_id" : 4, "nom" : "green", "notes" : 16, "age" : 22 }
{ "_id" : 4, "nom" : "green", "notes" : 9, "age" : 22 }

H & H: Research and Training 96 / 101


Agrégations

MongoDB
Exemple avec out
db.etudiant.aggregate(
[
{$project:
H I ©
EL
{
U
_id: "$nom",
O {$avg: "$notes"}
M
moyenne:
L
}
r e f E
Ach
},

]);
©
{ $out : "moyennes" }

H & H: Research and Training 97 / 101


Agrégations

MongoDB
Exemple avec out
db.etudiant.aggregate(
[
{$project:
H I ©
EL
{
U
_id: "$nom",
O {$avg: "$notes"}
M
moyenne:
L
}
r e f E
Ach
},

]);
©
{ $out : "moyennes" }

Vérifier la création de la collection moyennes


show collections; ou db.moyennes.find();
H & H: Research and Training 97 / 101
Agrégations

MongoDB

Considérons la collection books suivante (Exemple de la


documentation officielle
{ "_id" : 8751, "title" : "The Banquet", "author" :
"Dante", "copies" : 2 }
H I ©
{ "_id" : 8752, "title" : "Divine Comedy", "author"
UEL
O
LM
: "Dante", "copies" : 1 }
f E
{ "_id" : 8645, "title" : "Eclogues", "author" : "
r e
Dante", "copies" : 2 }
ch
©A
{ "_id" : 7000, "title" : "The Odyssey", "author" :
"Homer", "copies" : 10 }
{ "_id" : 7020, "title" : "Iliad", "author" : "Homer
", "copies" : 10 }

H & H: Research and Training 98 / 101


Agrégations

MongoDB
Exemple avec group
db.books.aggregate(
[
{ $group :
H I ©
EL
{ _id : "$author", books: { $push: "$title"
} }
O U
]);
}
f E LM
ch r e
©A

H & H: Research and Training 99 / 101


Agrégations

MongoDB
Exemple avec group
db.books.aggregate(
[
{ $group :
H I ©
EL
{ _id : "$author", books: { $push: "$title"
} }
O U
]);
}
f E LM
ch r e
© A
Le résultat :
{"_id": "Homer", "books": ["The Odyssey", "Iliad"]}
{"_id": "Dante", "books": ["The Banquet","Divine
Comedy","Eclogues"]}

H & H: Research and Training 99 / 101


Agrégations

MongoDB
Exemple avec match
db.books.aggregate(
[
{ $match :
{ author : "Dante" }
H I ©
}
UEL
]);
O
f E LM
ch r e
©A

H & H: Research and Training 100 / 101


Agrégations

MongoDB
Exemple avec match
db.books.aggregate(
[
{ $match :
{ author : "Dante" }
H I ©
}
UEL
]);
O
f E LM
Le résultat :
ch r e
©A
{ "_id" : 8751, "title" : "The Banquet", "author" :
"Dante", "copies" : 2 }
{ "_id" : 8752, "title" : "Divine Comedy", "author"
: "Dante", "copies" : 1 }
{ "_id" : 8645, "title" : "Eclogues", "author" : "
Dante", "copies" : 2 }
H & H: Research and Training 100 / 101
Agrégations

MongoDB

H I ©
Documentation officielle
UEL
O
https://docs.mongodb.com/
f E LM
ch r e
©A

H & H: Research and Training 101 / 101

Vous aimerez peut-être aussi