28 0 1MB
´ NoSQL : MongoDB Les bases de donnees Achref El Mouelhi Docteur de l’universite´ d’Aix-Marseille Chercheur en programmation par contrainte (IA) ´ ´ Ingenieur en genie logiciel [email protected]
H & H: Research and Training
1 / 101
Plan 1
Introduction
2
Installation
3
´ de MongoDB Particularites
4
´ Gestion de base de donnees ´ Creation Suppression Consultation
5
Gestion de collections ´ Creation Suppression Consultation
H & H: Research and Training
2 / 101
Plan 6
Gestion de documents Insertion Consultation Insertion multiple Modification ´ Operations sur les tableaux d’un document
7
´ Operateurs logiques et de comparaison ´ Operateurs de comparaison ´ Operateurs logiques ´ Autres operateurs
8
Index
9
´ Agregations
H & H: Research and Training
3 / 101
Introduction
MongoDB MongoDB ` ´ NoSQL orientee ´ documents systeme de gestion de base de donnees cre´ e´ en 2007
© I H EL
open-source ´ developp e´ en C++
O LM
U
´ SQL (COUNT, GROUP BY, ORDER BY, SUM...) disponibilite´ de plusieurs fonctionnalites
E f e r ch
´ ´ via une console JavaScript possibilite´ d’acceder aux donnees
©A
des drivers disponibles pour plusieurs langages de programmation (Java, JavaScript, PHP, Python, Ruby...) ´ stockees ´ sous format JSON (JavaScript Object Notation) donnees SGBD NoSQL le plus populaire en 2017 (et le plus utilise´ en France) utilise´ par MTV, Disney, Doodle, Adobe, eBay...
H & H: Research and Training
4 / 101
Introduction
MongoDB SQL vs MongoDB Base = Base Table = Collection
© I H EL
OU M L table ont les memes ˆ En BDR, tous les tuples d’une champs (mais E f e ˆ ´ ´ a` les valeurs peuvent differentes (les valeurs sont affectees chretre A des colonnes) © Enregistrement (tuple) = Document
Dans une collection MongoDB, les documents peuvent ne pas avoir un champ partage´ (pas de colonnes dans un document MongoDB).
H & H: Research and Training
5 / 101
Installation
MongoDB
´ echargement, ´ Tel installation et mise en place Allez sur le lien https://www.mongodb.com/try/download/community (onglet Community server), choisissez la version 4.4.1, msi comme Package et Windows comme Plarform.
O LM
© I H EL
U
E f e r ch
´ echarg ´ ´ Installez le fichier tel e.
©A
´ Sous la racine du disque dur (C:\ sous Windows), creez ´ l’arborescence data\db : c’est l’arborescence par defaut qui sera ´ par MongoDB. cherchee
H & H: Research and Training
6 / 101
Installation
MongoDB Ajouter MongoDB au path de Windows ´ Copiez le chemin absolu du repertoire bin de MongoDB dans Programmes files
© I H Dans la barre de recherche, cherchez Syst` EeLme ensuite cliquez U Param` etres syst` eme avanc´ esO M L E f Choisissez Variables d’environnement ensuite dans e r ch VariablesAutilisateur cliquez sur Nouvelle © Saisissez comme nom de variable PATH et comme valeur le ´ chemin absolu du repertoire bin de MongoDB dans Programmes files
H & H: Research and Training
7 / 101
Installation
MongoDB
´ Connexion personnalisee
© I H ´ l’arborescence data/db (on peut la ´ n’importe ou` sur Creez EcrLeer U le disque dur) O M-B L ´ Dans la console, executez start mongod --port E f e numeroPort --dbpath chr cheminDeData/db A Cliquez© sur la touche Entrer Ouvrez une console (invite de commandes)
´ Executez mongo --port numeroPort
H & H: Research and Training
8 / 101
Installation
MongoDB
(Autres) commandes MongoDB ´ mongod : demarrer le serveur
© I H EL
OU M L une base de donnees ´ mongoimport : pour importer E f e r c: h ´ mongoexport pour exporter une base de donnees A © ... ´ mongo : demarrer une connexion client
H & H: Research and Training
9 / 101
´ de MongoDB Particularites
MongoDB
© I H EL
´ Lister les commandes possibles sur les bases de donnees db.help()
O LM
U
E f e r ch
©A
H & H: Research and Training
10 / 101
´ de MongoDB Particularites
MongoDB
Du JSON au BSON
© I H EL
OU M Lnos donnees, ´ MongoDB enregistre toutes saisies sous format E f e JSON, dans le format binaire BSON. chr A © JSON : Binary JSON
H & H: Research and Training
11 / 101
´ de MongoDB Particularites
MongoDB
´ MongoDB : types de donnees
© I H EL
Number Boolean String Array Object
O LM
U
E f e r ch
©A
Null
H & H: Research and Training
12 / 101
´ Gestion de base de donnees
´ Creation
MongoDB ´ ´ Connexion et creation d’une base de donnees ` connexion : use nomBD Apres ´ de port par defaut ´ En se connectant : mongo --port numeroPort nomBD (numero : 27015) ´ ´ de port : mongo nomBD Ou sans preciser le numero
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
13 / 101
´ Gestion de base de donnees
´ Creation
MongoDB ´ ´ Connexion et creation d’une base de donnees ` connexion : use nomBD Apres ´ de port par defaut ´ En se connectant : mongo --port numeroPort nomBD (numero : 27015) ´ ´ de port : mongo nomBD Ou sans preciser le numero
O LM
Remarque
© I H EL
U
E f e r ch
©A
´ n’existe pas, elle sera cre´ ee. ´ Si la base de donnees
H & H: Research and Training
13 / 101
´ Gestion de base de donnees
´ Creation
MongoDB ´ ´ Connexion et creation d’une base de donnees ` connexion : use nomBD Apres ´ de port par defaut ´ En se connectant : mongo --port numeroPort nomBD (numero : 27015) ´ ´ de port : mongo nomBD Ou sans preciser le numero
O LM
Remarque
© I H EL
U
E f e r ch
©A
´ n’existe pas, elle sera cre´ ee. ´ Si la base de donnees
´ ´ Exemple de creation et d’utilisation d’une base de donnees ma base use ma_base H & H: Research and Training
13 / 101
´ Gestion de base de donnees
Suppression
MongoDB
© I H EL
´ courante Suppression de la base de donnees
O LM
db.dropDatabase()
U
E f e r ch
db.runCommand({dropDatabase: 1})
©A
H & H: Research and Training
14 / 101
´ Gestion de base de donnees
Consultation
MongoDB
´ existantes Lister les bases de donnees show dbs
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
15 / 101
´ Gestion de base de donnees
Consultation
MongoDB
´ existantes Lister les bases de donnees show dbs
O LM
© I H EL
U
E f e r ´ admin, config et local il existe trois bases ch de donnees A ©
´ Par defaut
´ si on ne se connecte pas a` une base de donnees, on utilise par ´ ´ appelee ´ test defaut une base de donnees
H & H: Research and Training
15 / 101
Gestion de collections
´ Creation
MongoDB Rappel ´ Une collection est l’equivalent d’une table en SQL.
© I H EL
´ Un document est l’equivalent d’un tuple en SQL.
O LM
U
E f e r ch
©A
H & H: Research and Training
16 / 101
Gestion de collections
´ Creation
MongoDB Rappel ´ Une collection est l’equivalent d’une table en SQL.
© I H EL
´ Un document est l’equivalent d’un tuple en SQL.
O LM
U
E f e r ch
´ Creation d’une collection
©A
Deux solutions :
Directement : db.createCollection(’adresse’) ´ En inserant un document : db.personne.insert({nom: "Wick", prenom: "john"}) H & H: Research and Training
16 / 101
Gestion de collections
Suppression
MongoDB
Suppression d’une collection db.nomCollection.drop()
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
17 / 101
Gestion de collections
Consultation
MongoDB
© I H EL
Lister les collections existantes show collections, ou show tables, ou
O LM
U
E f e r ch
db.getCollectionNames()
©A
H & H: Research and Training
18 / 101
Gestion de documents
Insertion
MongoDB Remarque ` Chaque document possede un id attribue´ par l’utilisateur ou par MongoDB (ObjectId). Le champ id constitue l’index de la collection.
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
19 / 101
Gestion de documents
Insertion
MongoDB Remarque ` Chaque document possede un id attribue´ par l’utilisateur ou par MongoDB (ObjectId). Le champ id constitue l’index de la collection.
Ajout d’un document Deux syntaxes :
O LM
© I H EL
U
E f e r ch
©A
db.nomCollection.insert({cl´ e1: ’val1’, cl´ e2: ’val2’ ... }) ou bien obj=({cl´ e1 :’val1’, cl´ e2: ’val2’ ... }) ensuite ´ ement ´ db.nomCollection.save(obj) (save ajoute l’el s’il n’existe pas, ´ ´ edent) ´ sinon elle le modifie en ecrasant le contenu prec
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 } )
O LM
© I H EL
U
E f e r ch
©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 } )
Exemple avec save
O LM
© I H EL
U
E f e r ch
©A
db.personne.save( { nom: ’wick’, prenom: ’john’, age: 45, sportif: true } ) H & H: Research and Training
20 / 101
Gestion de documents
Insertion
MongoDB
´ Exemple en definissant l’objet avant objet = { nom: ’dalton’, prenom: ’jack’, niveau: ’master’, }
O LM
© I H EL
U
E f e r ch
©A
db.personne.save(objet)
H & H: Research and Training
21 / 101
Gestion de documents
Insertion
MongoDB
Exemple avec identifiant personnalise´ db.personne.save( { _id: 10, nom: ’dalton’, prenom: ’jack’, niveau: ’master’, } )
O LM
© I H EL
U
E f e r ch
©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. save ajoute ou modifie un document.
O LM
© I H EL
U
insert ajoute seulement de nouveaux documents.
E f e r ch
´ e´ existe dans la save effectue une modification si l’ id specifi collection.
©A
´ ere ` une erreur si l’ id specifi ´ e´ existe dans la insert gen collection.
H & H: Research and Training
23 / 101
Gestion de documents
Consultation
MongoDB
´ Pour verifier que l’ajout a eu lieu db.nomCollection.find()
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
24 / 101
Gestion de documents
Insertion multiple
MongoDB
© I H EL
ˆ Pour faire plusieurs insertions au meme temps
O LM
U
db.nomCollection.insert( [ {cl´ e1 : ’val1’, cl´ e2 : ’val2’ ... }, {cl´ eN : ’valN’, cl´ eM : ’valM’ ... } ] )
E f e r ch
©A
H & H: Research and Training
25 / 101
Gestion de documents
Insertion multiple
MongoDB Exemple db.personne.insert( [ { nom: ’wick’, prenom: ’john’, age: 45, sportif: true
O LM
© I H EL
U
E f e r 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.
© I H EL
save() : pour remplacer toutes les valeurs d’un document selon ´ dans la methode. ´ l’identifiant par les valeurs indiquees Si ´ l’identifiant n’existe pas il sera ajoute.
O LM
U
E f e r ch
updateOne() : pour modifier uniquement le premier ´ ´ enregistrement de la selection (par defaut).
©A
updateMany() : pour modifier plusieurs documents. ´ ement ´ replaceOne() : pour remplacer le premier el de la ´ selection. H & H: Research and Training
27 / 101
Gestion de documents
Modification
MongoDB
´ La methode update
© I H EL
` db.nomCollection.update() prend au moins deux parametres :
O LM
U
´ ement(s) ´ ´ le(s) el concerne(s) par la modification
E f e r ch
les modifications
©A
quelques options
H & H: Research and Training
28 / 101
Gestion de documents
Modification
MongoDB Exemple db.personne.update( { _id: 12 }, { prenom: ’bill’, } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
29 / 101
Gestion de documents
Modification
MongoDB Exemple db.personne.update( { _id: 12 }, { prenom: ’bill’, } )
O LM
© I H EL
U
E f e r ch
©A Remarque
´ Le document ayant l’identifiant 12 a desormais un seul champ (hormis l’identifiant) : ´ e´ supprimes. ´ prenom. Les champs nom et niveau ont et
H & H: Research and Training
29 / 101
Gestion de documents
Modification
´ Pour modifier, on peut utiliser un des operateurs suivants $set : pour modifier la valeur d’un champ $unset : pour supprimer un champ ´ $inc : pour incrementer la valeur d’un champ
© I H EL
´ ee ´ $mul : pour multiplier l’ancienne valeur d’un champ par la valeur specifi $rename : pour renommer un champ
O LM
U
´ ´ ee ´ par $min : pour modifier la valeur d’un champ si elle est superieure a` la valeur specifi min (et inversement pour max) ...
E f e r ch
©A
H & H: Research and Training
30 / 101
Gestion de documents
Modification
´ Pour modifier, on peut utiliser un des operateurs suivants $set : pour modifier la valeur d’un champ $unset : pour supprimer un champ ´ $inc : pour incrementer la valeur d’un champ
© I H EL
´ ee ´ $mul : pour multiplier l’ancienne valeur d’un champ par la valeur specifi $rename : pour renommer un champ
O LM
U
´ ´ ee ´ par $min : pour modifier la valeur d’un champ si elle est superieure a` la valeur specifi min (et inversement pour max) ...
E f e r ch
©A
Syntaxe db.nomCollectiondb.update( {cl´ e1: ’val1’ ... }, {$set: {cl´ eN: ’valN’ ... }} ) H & H: Research and Training
30 / 101
Gestion de documents
Modification
MongoDB Exemple db.personne.update( { _id: 12 }, { $set: { prenom: ’peter’, nom: ’white’, age: 45 } } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
31 / 101
Gestion de documents
Modification
MongoDB Exemple db.personne.update( { _id: 12 }, { $set: { prenom: ’peter’, nom: ’white’, age: 45 } } )
O LM
© I H EL
U
E f e r ch
©A
Constats ´ e´ modifie. ´ Le prenom a et ´ e´ ajoutes. ´ Les deux champs nom et age ont et
H & H: Research and Training
31 / 101
Gestion de documents
Modification
MongoDB Exemple avec save db.personne.save( { _id: 12, prenom: ’james’, nom: ’hamilton’, genre: ’h’ } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
32 / 101
Gestion de documents
Modification
MongoDB Exemple avec save db.personne.save( { _id: 12, prenom: ’james’, nom: ’hamilton’, genre: ’h’ } )
O LM
© I H EL
U
E f e r ch
©A Remarque
´ dans save Les champs existant avant modification non mentionnes ´ seront supprimes. H & H: Research and Training
32 / 101
Gestion de documents
Modification
MongoDB ´ La methode update ne modifie que le premier document qui remplit la condition db.personne.update( { prenom: ’john’ }, { $set: { nom: ’abruzzi’ } } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
33 / 101
Gestion de documents
Modification
MongoDB Pour modifier tous les documents qui remplissent la condition, ` on ajoute le parametre multi: true db.personne.update( { prenom: ’john’ }, { $set: { nom: ’abruzzi’ } }, { multi: true } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
34 / 101
Gestion de documents
Modification
MongoDB Ou en utilisant updateMany db.personne.updateMany( { prenom: ’john’ }, { $set: { nom: ’abruzzi’ } } )
O LM
© I H EL
U
E f e r ch
©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 effectue´ db.personne.update( { prenom: ’steven’ }, { $set: { nom: ’segal’ } }, )
O LM
© I H EL
U
E f e r ch
©A
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’ }, { $set: { nom: ’segal’ } }, { upsert: true } )
O LM
© I H EL
U
E f e r ch
©A
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}})
O LM
© I H EL
U
E f e r ch
©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}})
O LM
Explication
© I H EL
U
E f e r ch
´ On commence par selectionner les documents dont le champ nom contient comme valeur bob
©A
´ ` de selection, ´ Si on ne precise aucun critere le premier document de la collection personne sera concerne´ 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 incrementer un champ d’un document db.personne.update({nom: "bob"}, {$inc:{age:20}})
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
39 / 101
Gestion de documents
Modification
MongoDB ´ Et si on veut incrementer un champ d’un document db.personne.update({nom: "bob"}, {$inc:{age:20}})
O LM
Explication
© I H EL
U
E f e r ch
´ On commence par selectionner les documents dont le champ nom contient comme valeur bob
©A
´ ` de selection, ´ Si on ne precise aucun critere le premier document de la collection personne sera concerne´ par la modification ´ Pour ce(s) document(s), on incrementera de 20 l’age pour s’il existe. Sinon, le champ age sera cre´ e´ 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 requete db.personne.update({nom: "bob"}, {$inc:{age:20}, $unset:{prenom:1} })
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
40 / 101
Gestion de documents
Modification
MongoDB
ˆ On peut aussi faire plusieurs modifications avec une seule requete db.personne.update({nom: "bob"}, {$inc:{age:20}, $unset:{prenom:1} })
O LM
Explication
© I H EL
U
E f e r ch
©A
ˆ on incremente ´ Avec cette requete, 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’ } } )
O LM
© I H EL
U
E f e r ch
©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’ } } )
O LM
Explication
© I H EL
U
E f e r ch
©A
´ On commence par selectionner tous les documents Pour ces documents, le champ nom sera renomme´ name
H & H: Research and Training
41 / 101
Gestion de documents
Modification
MongoDB
Supprimer un document db.personne.remove({nom: "bob"})
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
42 / 101
Gestion de documents
Modification
MongoDB
Supprimer un document db.personne.remove({nom: "bob"})
O LM
© I H EL
U
E f e r ch
Explication
©A
´ On commence par selectionner les documents dont le champ nom contient comme valeur bob ´ Ensuite tous ces documents seront supprimes
H & H: Research and Training
42 / 101
Gestion de documents
Modification
MongoDB
´ On peut egalement utiliser
O LM
deleteOne()
© I H EL
U
E f e r ch
deleteMany()
©A
H & H: Research and Training
43 / 101
Gestion de documents
Modification
MongoDB
´ ´ Recup erer tous les documents d’une collection db.personne.find()
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
44 / 101
Gestion de documents
Modification
MongoDB
´ ´ Recup erer tous les documents d’une collection db.personne.find()
© I H EL
OU M L "bob" ... db.personne.find({nom: E f e chr A ©
` Rechercher selon des criteres
H & H: Research and Training
})
44 / 101
Gestion de documents
Modification
MongoDB
´ ´ Recup erer tous les documents d’une collection db.personne.find()
© I H EL
OU M L "bob" ... db.personne.find({nom: E f e chr A © de documents Compter le nombre ` Rechercher selon des criteres
})
db.personne.find({nom: "bob" ... }).count()
H & H: Research and Training
44 / 101
Gestion de documents
Modification
MongoDB
´ Trier le resultat de recherche dans l’ordre croissant
© I H EL
db.personne.find().sort({name: 1})
O LM
U
E f e r ch
©A
H & H: Research and Training
45 / 101
Gestion de documents
Modification
MongoDB
´ Trier le resultat de recherche dans l’ordre croissant
© I H EL
db.personne.find().sort({name: 1})
O LM
U
E f e r ch
´ ´ Trier le resultat de recherche dans l’ordre decroissant
©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)
O LM
© I H EL
U
E f e r ch
©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)
© I H EL
Limiter le nombre de documents a` afficher
O LM
db.personne.find().limit(2)
U
E f e r ch
©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)
© I H EL
Limiter le nombre de documents a` afficher
O LM
db.personne.find().limit(2)
U
E f e r ch
Trier et limiter le nombre de documents a` 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)
© I H EL
Limiter le nombre de documents a` afficher
O LM
db.personne.find().limit(2)
U
E f e r ch
Trier et limiter le nombre de documents a` 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 resultat au format JSON db.personne.find().pretty();
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
47 / 101
Gestion de documents
Modification
MongoDB ´ Afficher le resultat au format JSON db.personne.find().pretty();
© I H EL
Et si on veut seulement afficher quelques champs
OU M L personnes ainsi que leurs c¸a affiche le nom de toutes les E f e identifiants (qui sera chr affiche´ automatiquement) A © db.personne.find({},{nom:1})
H & H: Research and Training
47 / 101
Gestion de documents
Modification
MongoDB ´ Afficher le resultat au format JSON db.personne.find().pretty();
© I H EL
Et si on veut seulement afficher quelques champs
OU M L personnes ainsi que leurs c¸a affiche le nom de toutes les E f e identifiants (qui sera chr affiche´ automatiquement) A © db.personne.find({},{nom:1})
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 selection db.personne.find().forEach( function(perso){ print(perso.nom +" "+ perso.prenom); } );
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
48 / 101
Gestion de documents
Modification
MongoDB ´ Appeler une fonction pour chaque document de la selection db.personne.find().forEach( function(perso){ print(perso.nom +" "+ perso.prenom); } );
O LM
© I H EL
U
E f e r ch
Explication
©A
´ Pour chaque document de la selection (forEach), on appelle une ´ fonction qui affiche le nom et le prenom.
H & H: Research and Training
48 / 101
Gestion de documents
Modification
MongoDB
´ ` Peut-on utiliser les expression reguli eres ?
© I H EL
chercher les personnes dont le nom commence par w : db.personne.find({name:/∧w/})
O LM
U
E f e r ch
©A
H & H: Research and Training
49 / 101
Gestion de documents
Modification
MongoDB
´ ` Peut-on utiliser les expression reguli eres ?
© I H EL
chercher les personnes dont le nom commence par w : db.personne.find({name:/∧w/})
O LM
U
E f e r ch
Explication
©A
´ ´ ` les deux / pour indiquer le debut et la fin de l’expression reguli ere ∧ pour indiquer par quoi commence le mot cherche´
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$/})
© I H L e ou par h : Epar chercher les personnes dont le nom commence U MO db.personne.find({name:/∧[eh]/}) L E f e r Ach dont le nom commence par une lettre chercher les© personnes comprise entre e et w : db.personne.find({name:/∧[e-w]/})
H & H: Research and Training
50 / 101
Gestion de documents
Modification
MongoDB ´ en ER Autres symboles utilises ˆ x? : pour indiquer que la lettre x est facultative. Elle peut y etre 0 ou 1 fois.
© I H EL
ˆ x+ : pour indiquer que la lettre x est obligatoire. Elle peut y etre 1 ou plusieurs fois.
OU M ˆ x* : pour indiquer que la lettre 0, EL x est facultative. Elle peut y etre 1 ou plusieurs fois. ref Ach ´ eter ´ x{2,4}© : pour indiquer que la lettre x doit se rep au moins deux fois et au plus 4 fois.
` quelconque . : un caractere | : le ou logique H & H: Research and Training
51 / 101
Gestion de documents
Modification
MongoDB
On peut aussi utiliser $regex
© I H EL
db.employes.find({prenom: { $regex: /john/}})
OU M ´ On peut aussi desactiver la sensibilit L e´ a` la casse avec $options E f e db.employes.find({prenom: { $regex: /john/, chr A $options: © ’i’ }})
H & H: Research and Training
52 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB ´ Listes des operations ´ ement ´ $push : pour ajouter un el au tableau ´ ement ´ $pop : pour supprimer le premier ou le dernier el d’un tableau
© I H EL
$pull : pour supprimer une ou plusieurs valeurs d’un tableau
O LM
U
´ ements ´ $pullAll : pour supprimer tous les el d’un tableau
E f e r ch
$position : a` utiliser avec push pour indiquer la position d’insertion dans un tableau ´ ´ ements ´ $slice : a` utiliser avec push pour preciser les el a` garder dans un tableau
©A
´ ements ´ $sort : a` utiliser avec push pour ordonner les el d’un tableau ... H & H: Research and Training
53 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ Considerons le document suivant :
O LM
© I H EL
U
db.personne.insert({ id : 5, nom : ’wick’, sport: [ ’foot’, ’hand’, ’tennis’] })
E f e r ch
©A
H & H: Research and Training
54 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
Ajouter un nouveau sport au tableau db.personne.update( { id: 5 }, { $push: { "sport": "basket" } } )
© I H EL
U O M ˆ ? Ainsi : Comment ajouter plusieurs sports Lavec une seule requete E f re { id: 5 }, { $push: { sport: db.personne.update( h c [’hockey’,’sky’] } } ) ©A
H & H: Research and Training
55 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
Ajouter un nouveau sport au tableau db.personne.update( { id: 5 }, { $push: { "sport": "basket" } } )
© I H EL
U O M ˆ ? Ainsi : Comment ajouter plusieurs sports Lavec une seule requete E f re { id: 5 }, { $push: { sport: db.personne.update( h c [’hockey’,’sky’] } } ) ©A Non, c¸a rajoute un tableau dans notre tableau
H & H: Research and Training
55 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
© I H db.personne.update( { id: 5 }, { $push: EL { sport: U {’hockey’,’sky’} } } ) MO L E f e r ch A © Ou comme-c¸a ?
H & H: Research and Training
56 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
© I H db.personne.update( { id: 5 }, { $push: EL { sport: U {’hockey’,’sky’} } } ) MO L E f e r ´ ere ` unecerreur h Non, c¸a gen A © Ou comme-c¸a ?
H & H: Research and Training
56 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
Solution
© I H EL
db.personne.update( { id: 5 }, { $push: { "sport": { $each: [’basket’,’sky’] } } } )
O LM
U
E f e r ch
Remarque
©A
´ ement ´ ` le dernier el ´ ement ´ $push : ajoute naturellement l’el apres du tableau
H & H: Research and Training
57 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ ement ´ ´ Et si on veut ajouter un el a` une position precise db.personne.update( { id: 5 }, { $push: { "sport": { $each: [’volley’], $position: 2 } } } )
O LM
© I H EL
U
E f e r ch
Explication
©A
´ ement ´ Ceci rajoute l’el volley a` la position 2 du tableau sport ` position est d’indice 0) (la premiere ´ ements ´ ´ es ´ Les autres el seront decal
H & H: Research and Training
58 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB ´ ement ´ Comment supprimer le premier el d’un tableau ? db.personne.update( { id: 5 }, { $pop: { sport: -1 } } )
© I H ´ ement ´ Comment supprimer le dernier el d’un tableau EL ? U MO db.personne.update( {Lid: 5 }, { $pop: { sport: E f 1 } } ) re h c ©A ´ ement ´ Comment supprimer un el quelconque d’un tableau ?
db.personne.update( { id: 5 }, { $pull: { ´ ement ´ "sport": "foot" } } ) : supprime l’el foot du tableau sport H & H: Research and Training
59 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
© I H EL
´ ements ´ ˆ ? Comment supprimer plusieurs el avec une seule requete
O LM
U
db.personne.update( { id: 5 }, { $pull: { sport: { $in: [’hockey’,’basket’] } } } )
E f e r ch
©A
H & H: Research and Training
60 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ Considerons le document cre´ e´ de la fac¸on suivante :
© I H EL
db.personne.insert({ _id : 6, nom : ’wick’, sport : [ ’foot’, ’hand’, ’tennis’] })
O LM
U
E f e r ch
©A
H & H: Research and Training
61 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ Si on execute db.personne.update( { _id: 6 }, {$push: { sport: { $each: [ ’hockey’, ’sky’, ’volley’ ], $slice: -5 } } })
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
62 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB Ensuite db.personne.find({_id:6}).pretty(); ´ Le resultat sera : { "_id" : 6, "nom" : "wick", "sport" : [ "hand", "tennis", "hockey", "sky", "volley" ]
O LM
© I H EL
U
E f e r ch
©A
} H & H: Research and Training
63 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ Considerons le document cre´ e´ de la fac¸on suivante :
© I H EL
db.personne.insert({ _id : 7, nom : ’wick’, sport : [ ’foot’, ’hand’, ’tennis’] })
O LM
U
E f e r ch
©A
H & H: Research and Training
64 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ Si on execute db.personne.update( { _id: 7 }, {$push: { sport: { $each: [ ’hockey’, ’sky’, ’volley’ ], $slice: 5 } } })
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
65 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB Ensuite db.personne.find({_id:7}).pretty(); ´ Le resultat sera : { "_id" : 7, "nom" : "wick", "sport" : [ "foot", "hand", "tennis", "hockey", "sky" ]
O LM
© I H EL
U
E f e r ch
©A
} H & H: Research and Training
66 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ Considerons le document cre´ e´ de la fac¸on suivante : db.personne.insert({ _id : 8, nom : ’wick’, sport : [’hand’, ’foot’, })
O LM
E f e r ch
© I H EL
U
’tennis’]
©A
H & H: Research and Training
67 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ Si on execute db.personne.update( { _id: 8 }, {$push: { sport: { $each: [’sky’, ’volley’ , ’hockey’], $sort: 1 } } })
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
68 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB Ensuite db.personne.find({_id:8}).pretty(); ´ Le resultat sera :
© I H EL
{ "_id" : 8, "nom" : "wick", "sport" : [ "foot", "hand", "hockey", "tennis", "sky", "volley" ]
O LM
U
E f e r ch
©A
} H & H: Research and Training
69 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ Pour trier dans l’ordre decroissant $sort: -1
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
70 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
Et quand il s’agit d’un tableau d’objet ? ´ Considerons le document suivant :
© I H EL
db.personne.insert({ _id : 10, nom : ’wick’, notes: [ {’programmation’: 17, ’coefficient’: 4}, {’OS’: 10, ’coefficient’: 2} ] })
O LM
U
E f e r ch
©A
H & H: Research and Training
71 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ ement ´ Comment ajouter un nouvel el au tableau ? db.personne.update( { _id: 10 }, { $push: { notes : {’compilation’: 15, ’ coefficient’: 1} } } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
72 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
Et pour supprimer ?
© I H EL
db.personne.update( { _id: 10 }, { $pull: { notes : {’compilation’: 15, ’coefficient’: 1} } } )
O LM
U
E f e r ch
©A
H & H: Research and Training
73 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
´ Considerons le document suivant : db.personne.insert({ _id : 11, nom : ’wick’, notes: [ {’programmation’: 17, ’coefficient’: 4, optionnel: false}, {’OS’: 10, ’coefficient’: 2} ] })
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
74 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB ˆ de suppression suivante ? Que fait la requete db.personne.update( { _id: 11 }, { $pull: { notes : {’programmation’: 17, ’coefficient’: 4} } } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
75 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB ˆ de suppression suivante ? Que fait la requete db.personne.update( { _id: 11 }, { $pull: { notes : {’programmation’: 17, ’coefficient’: 4} } } )
O LM
© I H EL
U
E f e r ch
©A
ˆ ˆ Elle supprime quand-meme l’objet meme s’il n’y pas de ` correspondance complete
H & H: Research and Training
75 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB ´ ´ Comment faire pour eviter cette problematique ? db.personne.update( { _id: 11 }, { $pull: { notes : { $elemMatch: {’programmation’: 17, ’coefficient’: 4} } } } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
76 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB ´ ´ Comment faire pour eviter cette problematique ? db.personne.update( { _id: 11 }, { $pull: { notes : { $elemMatch: {’programmation’: 17, ’coefficient’: 4} } } } )
O LM
© I H EL
U
E f e r ch
©A
Cette fois-ci, c¸a ne supprime pas l’objet car l’attribut optionnel: ´ e´ precis ´ e´ true n’a pas et H & H: Research and Training
76 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
Pour chercher un document selon une valeur dans son tableau d’objet db.personne.find( {"notes.programmation": {$ne:17} } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
77 / 101
Gestion de documents
´ Operations sur les tableaux d’un document
MongoDB
Pour chercher un document selon une valeur dans son tableau d’objet db.personne.find( {"notes.programmation": {$ne:17} } )
O LM
© I H EL
U
E f e r ch
A © Cela permet de chercher toutes les personnes dont la note en ´ programmation est differente de 17.
H & H: Research and Training
77 / 101
´ Operateurs logiques et de comparaison
MongoDB
© I H EL
´ relationnelles Comme pour les bases de donnees ´ operateurs de comparaison
U
E f e r ch
´ operateurs logiques ...
O LM
©A
H & H: Research and Training
78 / 101
´ Operateurs logiques et de comparaison
´ Operateurs de comparaison
MongoDB
´ la collection suivante (etudiant) : Commenc¸ons par creer
© I H EL
{"_id" : 1, "nom" : "wick", "notes": [10, 15, 12], "age" : 19 }
O LM
U
{"_id" : 2, "nom" : "bob", "notes": [18, 8, 12], "age" : 35 }
E f e r ch
{"_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
´ Operateurs logiques et de comparaison
´ Operateurs de comparaison
MongoDB
´ ´ ˆ es ´ de plus de 30 ans Comment selectionner les etudiants ag
© I H EL
db.etudiant.find({"age":{$gt:20}})
O LM
U
E f e r ch
©A
H & H: Research and Training
80 / 101
´ Operateurs logiques et de comparaison
´ Operateurs de comparaison
MongoDB
´ ´ ˆ es ´ de plus de 30 ans Comment selectionner les etudiants ag
© I H EL
db.etudiant.find({"age":{$gt:20}})
O LM
U
E f e r ch
{"_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
´ Operateurs logiques et de comparaison
´ Operateurs de comparaison
MongoDB ´ Les operateurs de comparaison ´ ` $gt : greater than (superieur a)
© I H EL
´ ´ $gte : greater than or equal (superieur ou egal)
U O M ´ ´ $lte : less than or equal (infL erieur ou egal) E f e ´ ch `r $eq : equal (egal a) A ©equal ´ $ne : not (different de ) ´ ` $lt : less than (inferieur a)
$in : dans (un tableau...) $nin : not in (pas dans)
H & H: Research and Training
81 / 101
´ Operateurs logiques et de comparaison
´ Operateurs logiques
MongoDB ´ ´ Comment selectionner les etudiants dont l’age est entre 30 et 40 ans db.etudiant.find( {$and: [ { age:{$gte:20}}, { age:{$lte:30}} ] } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
82 / 101
´ Operateurs logiques et de comparaison
´ Operateurs logiques
MongoDB ´ ´ Comment selectionner les etudiants dont l’age est entre 30 et 40 ans db.etudiant.find( {$and: [ { age:{$gte:20}}, { age:{$lte:30}} ] } )
O LM
© I H EL
U
E f e r ch
©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
´ Operateurs logiques et de comparaison
´ Operateurs logiques
MongoDB
´ Les operateurs logiques $and : et $or : ou
O LM
© I H EL
U
E f e r ch
$not : le non logique
©A
$nor : ou exclusif
H & H: Research and Training
83 / 101
´ Operateurs logiques et de comparaison
´ Autres operateurs
MongoDB Afficher les personnes dont le champ name existe db.personne.find( {name: {$exists:true} } )
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
84 / 101
´ Operateurs logiques et de comparaison
´ Autres operateurs
MongoDB Afficher les personnes dont le champ name existe db.personne.find( {name: {$exists:true} } )
O LM
© I H EL
U
E f e r ch
Afficher les personnes dont l’age est divisible par 5
©A
db.etudiant.find( { age: { $mod: [ 5, 0 ] } } ) H & H: Research and Training
84 / 101
Index
MongoDB
C’est quoi ? et pourquoi ?
© I H EL
Si on a un champ (autre que id) selon lequel on effectue des ` frequemment ´ recherches tres
OU M Lon peut creer ´ erer ´ ´ un index sur ce champ Pour accel la recherche, E f e hrindex sur chaque id d’une collection (et il est ´ Par defaut, on c a un A impossible © de le supprimer)
H & H: Research and Training
85 / 101
Index
MongoDB Pour consulter la liste d’index sur la collection personne db.personne.getIndexes(); c¸a affiche :
© I H EL
[ {
U
"v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.personne"
O LM
E f e r ch
©A } ]
H & H: Research and Training
86 / 101
Index
MongoDB
´ un nouvel index sur le champ nom Pour creer
© I H EL
db.personne.ensureIndex(nom:1); c¸a affiche : {
O LM
U
"createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1
E f e r ch
}
©A
H & H: Research and Training
87 / 101
Index
MongoDB On peut consulter une nouvelle fois la liste d’index db.personne.getIndexes(); c¸a affiche : [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.personne"
O LM
}, {
© I H EL
U
E f e r ch
© 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 verifie db.personne.getIndexes(); c¸a affiche : [ {
©
© I H EL
OU M "v" : 2,L E f "key" : { e r h c "_id" : 1 A
}, "name" : "_id_", "ns" : "test.personne"
} ] H & H: Research and Training
89 / 101
´ Agregations
MongoDB
© I H L forme d’un ˆ qui retourne un resultat ´ UE C’est une requete sous tableau MO L E f ´ c¸a permet d’utiliserrdes fonctions d’agregations comme en SQL e h c ©A
C’est quoi ? et pourquoi ?
H & H: Research and Training
90 / 101
´ Agregations
MongoDB Exemple db.etudiant.aggregate( [ {$project: {
© I H EL
_id: "$nom", moyenne: {$avg: "$notes"}
O LM
}
U
E f e r ch
} ]);
©A
H & H: Research and Training
91 / 101
´ Agregations
MongoDB Exemple db.etudiant.aggregate( [ {$project: {
© I H EL
_id: "$nom", moyenne: {$avg: "$notes"}
O LM
}
E f e r ch
} ]);
©A
´ Le resultat { { { {
"_id" "_id" "_id" "_id"
U
: : : :
"wick", "moyenne" : 12.333333333333334 } "bob", "moyenne" : 12.666666666666666 } "wolf", "moyenne" : 8.666666666666666 } "green", "moyenne" : 14.333333333333334 }
H & H: Research and Training
91 / 101
´ Agregations
MongoDB
© I H ´ ELpermet de remodeler $project : est un pipeline d’agregation qui U une collection MO L E´ f ´ c¸a permet d’utiliserrdes operateurs d’agregations comme en SQL e h c ©A
Explication
H & H: Research and Training
92 / 101
´ Agregations
MongoDB ´ Autres pipelines d’agregation $group : Permet de regrouper des documents comme un group by en SQL
© I H EL
´ une nouvelle collection a` partir d’une $out : Permet de creer ´ a` autre qui existe dej
O LM
U
´ $unwind : Permet de decomposer un tableau en autant de ´ ement. ´ documents que d’el
E f e r chde filtrer les documents selon la condition $match : Permet A ´ ee ´© specifi
´ ´ $sample : Permet de selectionner aleatoirement un nombre de ´ ee ´ dans la requete ˆ documents specifi ... H & H: Research and Training
93 / 101
´ Agregations
MongoDB ´ ´ Autres operateurs d’agregation $max, $min, $sum, $sqrt, $pow, $floor, $divide, $abs ... $ifNull
© I H EL
OU M L $arrayToObject, $dateFromString, $dateToString... E f e r ch$size... $split, $slice, A © $map, $reduce
$substr, $toUpper, $toLower, $concat ...
H & H: Research and Training
94 / 101
´ Agregations
MongoDB
Exemple avec sample db.etudiant.aggregate( [ { $sample: { size: 3 } } ]
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
95 / 101
´ Agregations
MongoDB
Exemple avec sample db.etudiant.aggregate( [ { $sample: { size: 3 } } ]
O LM
© I H EL
U
E f e r ch
©A
´ Le resultat ´ Il choisit aleatoirement trois documents de la collection
H & H: Research and Training
95 / 101
´ Agregations
MongoDB Exemple avec unwind db.etudiant.aggregate( [ { $unwind : "$notes" } ]);
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
96 / 101
´ Agregations
MongoDB Exemple avec unwind db.etudiant.aggregate( [ { $unwind : "$notes" } ]);
´ Le resultat { { { { { { { { { { { {
"_id" "_id" "_id" "_id" "_id" "_id" "_id" "_id" "_id" "_id" "_id" "_id"
: : : : : : : : : : : :
1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4,
"nom" "nom" "nom" "nom" "nom" "nom" "nom" "nom" "nom" "nom" "nom" "nom"
: : : : : : : : : : : :
U
"wick", "notes" : 10, "age" : 19 } "wick", "notes" : 15, "age" : 19 } "wick", "notes" : 12, "age" : 19 } "bob", "notes" : 18, "age" : 25 } "bob", "notes" : 8, "age" : 25 } "bob", "notes" : 12, "age" : 25 } "wolf", "notes" : 7, "age" : 35 } "wolf", "notes" : 6, "age" : 35 } "wolf", "notes" : 13, "age" : 35 } "green", "notes" : 18, "age" : 22 } "green", "notes" : 16, "age" : 22 } "green", "notes" : 9, "age" : 22 }
E f e r ch
©A
H & H: Research and Training
O LM
© I H EL
96 / 101
´ Agregations
MongoDB Exemple avec out db.etudiant.aggregate( [ {$project: {
© I H EL _id: "$nom", U O {$avg: "$notes"} moyenne: M L } E f e r Ach
}, { $out : "moyennes" } ]);
©
H & H: Research and Training
97 / 101
´ Agregations
MongoDB Exemple avec out db.etudiant.aggregate( [ {$project: {
© I H EL _id: "$nom", U O {$avg: "$notes"} moyenne: M L } E f e r Ach
}, { $out : "moyennes" } ]);
©
´ ´ Verifier la creation de la collection moyennes show collections; ou db.moyennes.find(); H & H: Research and Training
97 / 101
´ Agregations
MongoDB ´ Considerons la collection books suivante (Exemple de la documentation officielle { "_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 } { "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 } { "_id" : 7020, "title" : "Iliad", "author" : "Homer ", "copies" : 10 }
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
98 / 101
´ Agregations
MongoDB Exemple avec group db.books.aggregate( [ { $group : { _id : "$author", books: { $push: "$title" } } } ]);
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
99 / 101
´ Agregations
MongoDB Exemple avec group db.books.aggregate( [ { $group : { _id : "$author", books: { $push: "$title" } } } ]);
O LM
© I H EL
U
E f e r ch
A © ´ Le resultat :
{"_id": "Homer", "books": ["The Odyssey", "Iliad"]} {"_id": "Dante", "books": ["The Banquet","Divine Comedy","Eclogues"]} H & H: Research and Training
99 / 101
´ Agregations
MongoDB Exemple avec match db.books.aggregate( [ { $match : { author : "Dante" } } ]);
O LM
© I H EL
U
E f e r ch
©A
H & H: Research and Training
100 / 101
´ Agregations
MongoDB Exemple avec match db.books.aggregate( [ { $match : { author : "Dante" } } ]);
O LM
´ Le resultat :
© I H EL
U
E f e r ch
©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
´ Agregations
MongoDB
Documentation officielle
O LM
https://docs.mongodb.com/
© I H EL
U
E f e r ch
©A
H & H: Research and Training
101 / 101