Vous êtes sur la page 1sur 32

Chapitre 3 : MongoDB

Opérations CRUD
Ines Slimen
Plan
• MongoDB Shell
• Types de données
• Insertion
• Lecture
• Mise à jour
• Suppression
• Transfert de données
• Import / Export
• Sauvegarde et récupération

18/04/2020 MongoDB-CRUD 2
Mongo Shell
• Le meilleur moyen d'interroger MongoDB est d'utiliser le shell.
• Toute l'administration de MongoDB se fait grâce au shell.
• Le shell MongoDB est très simple à utiliser.

18/04/2020 MongoDB-CRUD 3
Mongo Shell
• Démarrage : cmd → mongod

• Connexion : cmd → mongo

• Arrêter la base MongoDB : Utiliser la commande shutdown


> use admin //connection à la base admin
> db.shutdownServer(); //arrêter le serveur

18/04/2020 MongoDB-CRUD 4
Mongo Shell
• Afficher la base de données courante : db
• Afficher la liste des bases de données : show dbs
• Sélectionner une base de données : use <name>, Exemple : use mabd
Par défaut, et suite à chaque nouvelle connexion, le serveur Mongo pointe sur la
base de données test
• Afficher les collections : show collections
• Supprimer une base de données : db.runCommand({dropDatabase: 1})
Le shell est sensible à la casse
Exemples :
use Admin use admin
Show dbs show dbs

18/04/2020 MongoDB-CRUD 5
Types de données

Type Exemple
Int/double/.. {a:1}
boolean {b:true}
String {c:’hello’}
Array {d:[1,2,3]}
Date {e:ISODate(« 2012-12-19 »)}
Object {g:{a:1,b:true}}

18/04/2020 MongoDB-CRUD 6
Mongo Shell
• Les commandes CRUD ont la syntaxe suivante :
db.<collection>.<methode>
• Exemple :
• db.val.insert({name: "Olivier", etude : "Master"})

18/04/2020 MongoDB-CRUD 7
CRUD
• Create
• db.collection.insert( <document> )
• db.collection.update( <query>, <update>, { upsert: true } )
• Read
• db.collection.find( <query>, <projection> )
• db.collection.findOne( <query>, <projection> )
• Update
• db.collection.update( <query>, <update>, <options> )
• Delete
• db.collection.remove( <query>, <justOne> )

18/04/2020 MongoDB-CRUD 8
Insertion
• Prenons cet exemple qui insère un document dans la collection people :

• Pour pouvoir l’afficher, il faudrait utiliser la commande find()

• On voit qu’un champ portant le nom _id et de type ObjectId a été inséré.
• Tout document doit avoir un identifiant unique ObjectId dans la collection,
• Si on ne le précise pas lors de l’insertion, MongoDB se charge de le créer à notre
place.
• Cet identifiant ne peut pas être modifié et constitue la clé primaire de la collection.
• On peut aussi préciser le type d’un champ comme le montre l’exemple :
db.people.insert({nom:"smith",age:NumberInt(12)})
18/04/2020 MongoDB-CRUD 9
Lecture : find() (1/2)

• La commande find() permet de rechercher et d’afficher des documents


• find() peut prendre deux paramètres:

• Le premier est un document qui constitue le critère de recherche. Le


document retourné sera identique au document spécifié (sur les champs
fournis bien sûr). Cette première partie correspond donc à la clause
WHERE de SQL.
• Le second est un document qui permet de restreindre les champs du
document retourné, à la manière de la clause SELECT de SQL. En son
absence, tous les champs sont retournés.
• On note aussi que l'identifiant est toujours retourné, à moins que l'on
dise explicitement le contraire avec l’option _id:0 ou _id:false
18/04/2020 MongoDB-CRUD 10
Lecture : find() (2/2)
• Lorsqu’on souhaite afficher un champ on doit le préciser au niveau du
deuxième critère du find() avec l’option 1 ou true
• Exemple : db.people.find({},{nom:1,prenom:true,_id:0}) => Affichage des
noms et prénoms de tous les documents qui en possèdent (MongoDB est
sans schéma obligatoire)
• Remarque : Lorsqu’aucun critère de recherche n’est utilisé (et donc, affichage de tous
les documents) les {} sont obligatoires
• Dans le shell mongo, les résultats sont paginés et l'on passe aux résultats
suivants en tapant la commande it (pour iterate).
• Pour un bel affichage, il suffit d’ajouter la fonction pretty() à la fin de la
fonction de find() ou findOne()
• Exemple : db.emp.find().pretty()

18/04/2020 MongoDB-CRUD 11
Lecture : findOne()
• La commande findOne() renvoi au plus un document.
• Sans argument, elle retourne un document quelconque de la
collection
• Exemple: Différence entre find() et findOne()

18/04/2020 MongoDB-CRUD 12
Lecture : Utilisation d'opérateurs (1/7)
Opérateur Signification Exemple
$gt : Greater than >
$gt, $gte, $lt, $gte : Greater than or Equal >=
score: { $gt: 95, $lte: 98 }
$lte $lt : lower than <
$lte : lower than or equal <=
$exists Test sur l'existence d'un champ profession: { $exists: true }
$type Test sur le type d'un champ name: { $type: 2 }
Recherche de pattern dans une
$regex name: { $regex: "e$" }
chaine
OU logique sur les clauses fournies
$or $or: [ { name: { $regex: "e$"} }, age: { $exists: true} ]
dans le tableau
ET logique sur les clauses fournies
$and $and: [ { name: { $regex: "e$"} }, age: { $exists: true} ]
dans le tableau

18/04/2020 MongoDB-CRUD 13
Lecture : Utilisation d'opérateurs (2/7)

MongoDB SQL
db.people.find() Select * from people
db.people.find({"age" : 27}) Select * from people where age=27
db.people.find({}, {“nom" : 1, “age" : 1}) Select nom,age from people
db.people.find({}, {“nom" : 0}) Select age,profession from people
db.people.find({"age" : {"$gte" : 18, "$lte" : 30}}) Select * from people where age between 18 and 30
db.raffle.find({"ticket_no" : {"$in" : [725, 542, 390]}}) Select * from raffle where ticket_no in (725,542,390)

18/04/2020 MongoDB-CRUD 14
Lecture : Utilisation d'opérateurs (3/7)
• Si l'on donne plusieurs conditions pour le même champ, c'est la
dernière qui va gagner car le shell va construire un premier objet
correspondant à la première condition, puis écraser cet objet quand il
va lire la seconde condition.

18/04/2020 MongoDB-CRUD 15
Lecture : Utilisation d'opérateurs (4/7)
• Afficher les documents qui contiennent le champ age
db.people.find({age:{$exists:true}})
• Afficher les document dont le type du champ nom est String
db.people.find({nom:{$type:2}})
• Nom qui contient la lettre i : db.people.find({nom:{$regex:"i"}})
• Nom qui se termine par h :db.people.find({nom:{$regex:"h$"}})
• Nom qui commence par : db.people.find({nom:{$regex:"^s"}})

18/04/2020 MongoDB-CRUD 16
Lecture : Utilisation d'opérateurs (5/7)
• Afficher les documents représentant des personnes dont le nom se
termine par e et dont le champ age existe
db.people.find({$or:[{name:{$regex:"e$"}},{age:{$exists:true}}]})

• Afficher les documents représentant des personnes dont le nom se


termine par e ou dont le champ age existe
db.people.find({$and:[{name:{$regex:"e$"}},{age:{$exists:true}}]})

18/04/2020 MongoDB-CRUD 17
Lecture : Utilisation d'opérateurs (6/7)
• Afficher les utilisateurs dont le nom est Smith ou Bob
db.users.find( { nom : { $in : [ "smith" , "Bob" ] }})
• Afficher les utilisateurs dont leurs préférences sont running et pickles.
db.users.find({favorites:{$all:["running","pickles"] }})

18/04/2020 MongoDB-CRUD 18
Lecture : Utilisation d'opérateurs (7/7)
• limit(): pour récupérer les n premiers résultats uniquement

• sort(): pour trier les résultats

• count(): retourne le nombre de documents satisfaisant la requête.

18/04/2020 MongoDB-CRUD 19
Lecture d’un sous-documents
• Voici un exemple de document contenant un sous document

• Afficher l’article dont le nom de l’auteur est Wursteisen :

18/04/2020 MongoDB-CRUD 20
Mise à jour des documents (1/2)
• La méthode update() de MongoDB possède plusieurs variantes:
• La première permet la mise à jour globale des documents

• La seconde variante permet une mise à jour sélective des champs. On utilise
pour cela de nouveaux opérateurs. Le premier et probablement le plus utile
est l'opérateur $set:

18/04/2020 MongoDB-CRUD 21
Mise à jour des documents (2/2)
• On peut aussi utiliser l'opérateur $inc sur les champs entiers pour
incrémenter leur valeur:

• L'opérateur suivant, $unset, permet de supprimer un champ d'un document:

18/04/2020 MongoDB-CRUD 22
Mise à jour de plusieurs documents
• Les requêtes de mise à jour ne s’appliquent qu’à un seul document.
• Si on souhaite mettre à jour plusieurs documents, il faut passer un
troisième argument à la méthode update() : {multi:true}

18/04/2020 MongoDB-CRUD 23
Mise à jour d’un champ de type tableau (1/2)
• Création champ de type tableau (le premier indice d’un tableau est 0):

• Modifier la deuxième valeur du tableau "activité" pour lui attribuer la valeur


"camping".

• Ajouter une valeur au tableau des activités : l’opérateur $push

18/04/2020 MongoDB-CRUD 24
Mise à jour d’un champ de type tableau (2/2)
• L'opérateur $pop permet de retirer une valeur du tableau.
• Si la valeur passée à l'opérateur est 1, ce sera la dernière valeur qui sera supprimée,
• si c'est -1 ce sera la première valeur.

• Pour spécifier l’élément à retirer : $pull

18/04/2020 MongoDB-CRUD 25
Suppression de documents et de collections
• Suppression de documents : remove()
• Supprimer les documents dont le nom est Jean : db.people.remove()

• Suppression de collections : drop()


• Supprimer la collection article : db.article.drop()

18/04/2020 MongoDB-CRUD 26
Transfert de données
Import
Export

18/04/2020 Introduction MongoDB 27


Import/Export (1/2)
• mongoexport et mongoimport sont deux commandes utilisées pour
l’import et l’export de données à partir de fichiers JSON ou CSV.
• Exemple d’Import à partir d’un fichier json
mongoimport --db mabase --collection personnes --type json --file "c:\notes.json "
Avec :
--db : nom de la base de données cible
--collection : nom de la collection cible
--type : type du fichier source à importer
--file : adresse du fichier source à importer

18/04/2020 Introduction MongoDB 28


Import/Export (2/2)
• Exemple d’Export sous format json
mongoexport --db test --collection people --out people.json
Avec :
--db : nom de la base de données source
--collection : nom de la collection à exporter
--out : fichier de sortie
• Remarque :
Ces commandes doivent être exécutées dans une invite de commande
cmd (et non pas au niveau du shell mongo)

18/04/2020 MongoDB-CRUD 29
Sauvegarde et récupération

18/04/2020 MongoDB-CRUD 30
Sauvegarde
• mongodump : permet de sauvegarder une partie ou la totalité de la base dans un
dossier dump.
• mongodump --help : visualiser les options de mongodump
• --db DBNAME sauvegarde de la base DBNAME
• --collection COLLECTIONNAME sauvegarde la collection COLLECTIONNAME
• Exemple :
mongodump --db test --out backup
→ sauvegarder la base test dans le répertoire backup

18/04/2020 MongoDB-CRUD 31
Récupération
• mongorestore : récupère les données à partir d’un fichier BSON
• --db et --collection permettent de récupérer une base et une collection
spécifique.
• Exemple:
mongorestore --db test --collection people backup/test/people.bson
→récupérer la collection people dans la base test à partir du fichier people.bson

18/04/2020 MongoDB-CRUD 32

Vous aimerez peut-être aussi