Académique Documents
Professionnel Documents
Culture Documents
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
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 :
• 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)
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}}]})
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
18/04/2020 MongoDB-CRUD 19
Lecture d’un sous-documents
• Voici un exemple de document contenant un sous document
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:
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):
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.
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()
18/04/2020 MongoDB-CRUD 26
Transfert de données
Import
Export
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