Vous êtes sur la page 1sur 31

Les bases de données

NoSQL : MongoDB
Mongo DB
❑ Système de gestion de base de données NoSQL
❑ Orienté documents
❑ Crée en 2007
❑ Open-source developpé en C++
❑ Disponibilité de plusieurs fonctionnalités SQL (COUNT, GROUP BY, ORDER BY,
SUM...)
❑ Possibilité d’accèder aux données via une console JavaScript
❑ Données stockées sous format JSON (JavaScript Object Notation)

2
Terminologie de MongoDB
Vue d’ensemble sur les principaux concepts (communs à plusieurs systèmes NoSQL).

3
Présentation de MongoDB
Documents
▪ Unités de base dans une base MongoDB.
▪ Equivalents aux objets JSON et sont comparables aux enregistrements
d'une table dans une base de données relationnelle.
▪ Tout document appartient à une collection et a un champ appelé _id qui
identifie le document dans la base de données.
▪ Enregistrés sur le disque sous un format BSON (JSON binaire).

4
Les types sous MongoDB
Number
Boolean
String
Array
Object
Null
Pour les dates, on utilise la classe Date de Javascript. {‘’ a ’’ : new Date()}

5
Gestion d’une BD: Création &
consultation
Création:
> use <nombase>

Consultation:
> show dbs

6
Gestion des collections :
db.createCollection(’adresse’)

db.nomCollection.drop()

show collections

7
Gestion des documents: insertion
Deux syntaxes :
1) db.nomCollection.insert({clé1: ’val1’, clé2: ’val2’ ... }) ou bien
2) obj=({clé1 :’val1’, clé2: ’val2’ ... })
db.nomCollection.save(obj)

8
Gestion des documents: insertions
multiples
Insertions multiples :
db.nomCollection.insert( [ {clé1 : ’val1’, clé2 : ’val2’ ... },
{cléN : ’valN’, cléM : ’valM’ ... } ] )

Afficher le contenu d’une collection:


db.nomCollection.find()
db.nomCollection.find().pretty() : affichage au format JSON

Afficher le contenu d’une collection selon un critère :


db.nomCollection.find ( {clé : ‘’valeur’’ } )

9
Soit la base « Restaurant », et soit un document de cette collection :
db.restaurants.findOne()
{
"_id" : ObjectId("594b9172c96c61e672dcd689"),
"restaurant_id" : "30075445",
"name" : "Morris Park Bake Shop",
"borough" : "Bronx",
"cuisine" : "Bakery",
"address" : {
"building" : "1007",
"coord" :{"type":"Point","coordinates":[-73.856077,40.848447]},
"street" : "Morris Park Ave",
"zipcode" : "10462"
},
"grades" : [
{"date" : ISODate("2014-03-03T00:00:00.000Z"),"grade" : "A","score" : 2},
{"date" : ISODate("2013-09-11T00:00:00.000Z"),"grade" : "A","score" : 6},
{"date" : ISODate("2013-01-24T00:00:00.000Z"),"grade" : "A","score" : 10},
{"date" : ISODate("2011-11-23T00:00:00.000Z"),"grade" : "A","score" : 9},
{"date" : ISODate("2011-03-10T00:00:00.000Z"),"grade" : "B","score" : 14}
]
}

10
Affichage
db.restaurants.find( { "borough" : "Brooklyn" } )
db. restaurants.findOne( )
db.restaurants.find( ).count()
db.restaurants.find( { "borough" : "Brooklyn" } ).count()

db.restaurants.find (
{ "borough" : "Brooklyn",
"cuisine" : "Italian" }
)

11
Affichage
db.restaurants.find(
{ "borough" : "Brooklyn",
"cuisine" : "Italian",
"address.street" : "5 Avenue" }
)
db. restaurants.find( ).sort({borough : 1})
db. restaurants.find( ).sort({nom: -1})
db. restaurants.find ( { } , {borough :1} )

db. restaurants.find( { } , {borough :1, _id: 0 } )

12
Affichage : les expressions régulières?
▪ Chercher les restaurants dont le nom commence par s :
db. restaurants.find( { name : /^s/ } )

13
Affichage : les expressions régulières?
Chercher les restaurants dont le nom se termine par k :
db.restaurants.find( { name : /k$/ } )

Chercher les restaurants dont le nom commence par e ou par h :


db. restaurants.find({name : /^[eh]/ } )

Chercher les restaurants dont le nom commence par une lettre


comprise entre e et w :
db. restaurants.find({name : /^[e-w]/ } )

14
Autres opérateurs
Opérateur Signification
x? Indique que la lettre x est facultative. Elle peut y être 0 ou 1 fois.

X+ Indique que la lettre x est obligatoire. Elle peut y être 1 ou plusieurs fois.

x* Indique que la lettre x est facultative. Elle peut y être 0, 1 ou plusieurs


fois.
x{2,4} Indique 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

15
Filtrage avec des opérations
$gt : greater than (supérieur à)
$gte : greater than or equal (supérieur ou égal)
$lt : less than (inférieur à)
$lte : less than or equal (inférieur ou égal)
$eq : equal ( égal à)
$ne : not equal (différent de )
$in : dans (un tableau...)
$nin : not in (pas dans)

16
Opérateur $lt
db.Restaurants.find(
{"borough":"Manhattan",
"grades.score":{ $lt:10, $not:{$gte:10} } },
{"name":1,"grades.score":1, "_id":0}
)

17
Exemple 2
db.restaurants.find(
{ "grades" :
{ $elemMatch :
{ "grade" : "C", "score" : {$lt :40} } } },
{"grades.grade" : 1,"grades.score" : 1}
);

18
Affichage : Distinct
Afficher les différents quartiers de New York
db.restaurants.distinct("borough")

19
Opérateurs logiques

$and : et
$or : ou
$not : le non logique
$nor : ou exclusif

20
Opérateurs de comparaison
{"_id" : 1, "nom" : "wick", "notes": [10, 15, 12], "age" : 19 }
{"_id" : 2, "nom" : "bob", "notes": [18, 8, 12], "age" : 35 }
{"_id" : 3, "nom" : "wolf", "notes": [7, 6, 13], "age" : 25 }
{"_id" : 4, "nom" : "green", "notes": [18, 16, 9], "age" : 22 }

Les étudiants dont l’âge est entre 20 et 30 ans


db.etudiant.find(
{ $and : [ { age: { $gte:20 }},
{ age: { $lte:30 }} ] }
)

21
Modification
▪ $set : pour modifier la valeur d’un champ
▪ $unset : pour supprimer un champ
▪ $inc : pour incrémenter la valeur d’un champ
▪ $mul : pour multiplier l’ancienne valeur d’un champ par la valeur
spécifiée
▪ $min : pour modifier la valeur d’un champ si elle est supérieure à la
valeur spécifiée par min (et inversement pour max) ..

22
Exemples
> db.clients.update ({"nom": "Salah"},
{$set: {ville: " Sousse"}} )

Soit le document suivant:


{{ _id: 1, nom: “Ali", salaire : 400},
{ _id: 16, nom: “Salah", salaire : 250} }

> db.clients.update ( {nom: "Ali "},


{$unset: {salaire: " "}} )

23 23
Exemples
> db.produits.update({ libelle: "abc123" },
{ $inc: { quantité: -2, " dimensions.longueur": 1 } } )

> db.produits.update({ _id:1 },


{ $mul: { prix: 1.25, quantite:2 } } )

Soit le document suivant:


> { _id: 1 , highScore : 800 , lowScore: 200 }

> db.scores.update ( { _id: 1 }, { $min: { lowScore: 150 } } )


compare la valeur actuelle de lowScore (200) à la valeur spécifiée (150) et
modifie la valeur de lowScore à 150 puisque 150 est inférieure à 200.
24 24
Exemple
Calculer la population de chaque Etat :

db.Regions.aggregate({$group:{ _id:"$state’’ , population:{$sum:"$pop"}}})


{ "_id" : "MA", "population" : 15338 }
{ "_id" : "UT", "population" : 17225 }
Et si on calcule la moyenne :
db.Regions.aggregate({$group:{ _id:"$state’’ , population:{$avg:"$pop"}}})

Et si on trie le résultat par ordre décroissant de leur population.


db. Regions .aggregate
({$group:{_id:"$state",population:{$sum:"$pop"}}},{$sort:{population:-1}})
25
Exemple avec out
db.Regions.aggregate(
{$group:{ _id:'$state',population:{$sum:'$pop'}}},
{$out:’coll_habitants’})

Créé une nouvelle collection contenant deux champs : _id (relatif au state)
et population

26
Opérations sur les tableaux
Considérons le document suivant :
db.personne.insert({ _id : 5, nom : ’’Ali’’, sport: [ ’’foot’’, ’’hand’’, ’’tennis’’] })

Ajout d’un nouveau sport au tableau


db.personne.update( { _id: 5 }, { $push : {"sport": "basket" } } )

db.personne.update( { _id: 5 } ,
{ $push : { "sport" : { $each : [’’gymnastique’’,’’volley’’] } } } )

27
Opérations sur les tableaux
Ajouter un élément à une position précise
db.personne.update( { _id: 5 } ,
{ $push: { "sport": { $each: [’volley’], $position: 2 }}})

Explication
▪ 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

28
Opérations sur les tableaux
Supprimer le premier élément d’un tableau
db.personne.update( { _id: 5 }, { $pop: { sport: -1 } } )

Supprimer le dernier élément d’un tableau


db.personne.update( { _id: 5 }, { $pop: { sport: 1 } } )

Supprimer un élément quelconque d’un tableau


db.personne.update( { _id: 5 },
{ $pull: { "sport": "foot" } } )

29
Opérations sur les tableaux
Supprimer plusieurs éléments avec une seule requête
db.personne.update( { _id: 5 },
{ $pull : { sport: { $in : [’hockey’,’basket’] } } } )

30
Opérations sur les tableaux
db.personne.update( { _id: 6 },
{$push: {sport: { $each: [ ’’hockey’’, ’’sky’’, ’’volley’’ ], $slice: -5 } } })

db.personne.update( { _id: 7 },
{$push: { sport: { $each: [ ’’hockey’’, ’’sky’’, ’’volley’’ ], $slice: 5 } } })

db.personne.update( { _id: 8 },
{$push: { sport: { $each: [’’sky’’, ’’volley’’ , ’’hockey’’], $sort: 1 } } })
31

Vous aimerez peut-être aussi