MongoDB 2
MongoDB 2
MongoDB 2
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’ ... } ] )
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} )
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$/ } )
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.
. 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 }
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"}} )
23 23
Exemples
> db.produits.update({ libelle: "abc123" },
{ $inc: { quantité: -2, " dimensions.longueur": 1 } } )
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’’] })
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 } } )
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