0% ont trouvé ce document utile (0 vote)
102 vues40 pages

Introduction à MongoDB et JSON

Transféré par

rayenfazai11
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
102 vues40 pages

Introduction à MongoDB et JSON

Transféré par

rayenfazai11
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre II : 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
Rappel sur JSON
JSON c’est quoi?
JSON : JavaScript Object Notation
Format de représentation textuelle des données dérivé de la notation des objets du
langage JavaScript.
Permet de représenter de l'information structurée comme le permet XML par exemple.

3
JSon : Structures
❑ CLE + VALEUR
▪ “nom” : “Ali”
❑ Objet : collection de paires “clés/valeurs”
▪ Encapsulé dans des accolades
{ “nom” : “Touzani”,
“prenom” : “Narjess”,
“genre” : 1}
❑ Liste ordonnée de valeurs
▪ “liste” : [“SQL”, “XML”, “NoSQL”, “BDA”, “RI”]

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

5
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).

6
Présentation de MongoDB
Collection
▪ Ensemble de documents, l'équivalent d'une table en relationnel.
▪ Les champs des documents d'une collection peuvent être différents d'un
document à un autre. Le seul champ commun et obligatoire est le champ
"_id".

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

8
Gestion d’une BD: Création &
consultation
Création:
Pour se placer dans une base :
> use <nombase>
Remarque : si la base de données n’existe pas, elle sera créée
Par défaut
▪ Il existe trois bases de données admin, config et local
▪ si on ne se connecte pas à une base de données, on travaille dans une base de données appelée test
Consultation:
Afficher la liste des bases de données:
> show dbs

9
Gestion d’une BD: Suppression
Suppression de la base de données courante

◦ [Link]()

10
Gestion des collections :
création/suppression/Consultation
Création : Deux solutions :
❑ Directement :
◦ [Link](’adresse’)
❑ En insérant un document :
◦ [Link] ({nom: "Wick", prenom: "john"})
Suppression
[Link]()
Consultation
show collections
11
Gestion des documents: insertion
Chaque document possède un _id attribué par l’utilisateur ou par MongoDB (ObjectId).
Le champ _id constitue l’index de la collection.
Ajout d’un document
Deux syntaxes :
1) [Link]({clé1: ’val1’, clé2: ’val2’ ... }) ou bien
2) obj=({clé1 :’val1’, clé2: ’val2’ ... })
[Link](obj)
(save ajoute l’élément s’il n’existe pas, sinon elle le modifie en écrasant le contenu
précédent)

12
Exemples
1) Exemple avec insert 3) Exemple en définissant l’objet avant
[Link]( objet =
{ { nom: ’dalton’,
nom: ’wick’, prenom: ’jack’,
prenom: ’john’,
age: 45, niveau: ’master’
sportif: true }
} [Link](objet)
) 4) Exemple avec identifiant personnalisé
2) Exemple avec save
[Link] ( [Link](
{ { _id: 10,
nom: ’wick’, nom: ’dalton’,
prenom: ’john’, prenom: ’jack’,
age: 45, niveau: ’master’
sportif: true }
}
)
)
13
4) Exemple avec identifiant personnalisé
[Link](
{ _id: 10,
nom: ’dalton’,
prenom: ’jack’,
niveau: ’master’
}
)
14
Gestion des documents: insertion
save vs insert

❑save et insert permettent l’insertion et l’insertion multiple.

❑save ajoute ou modifie un document. insert ajoute seulement de nouveaux


documents.

❑save effectue une modification si l’_id spécifié existe dans la collection. insert
génère une erreur si l’_id spécifié existe dans la collection.

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

Afficher le contenu d’une collection:


[Link]()
[Link]().pretty() : affichage au format JSON

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


[Link] ( {clé : ‘’valeur’’ } )

16
Soit la base « Restaurant », et soit un document de cette collection :
[Link]()
{
"_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-03T[Link].000Z"),"grade" : "A","score" : 2},
{"date" : ISODate("2013-09-11T[Link].000Z"),"grade" : "A","score" : 6},
{"date" : ISODate("2013-01-24T[Link].000Z"),"grade" : "A","score" : 10},
{"date" : ISODate("2011-11-23T[Link].000Z"),"grade" : "A","score" : 9},
{"date" : ISODate("2011-03-10T[Link].000Z"),"grade" : "B","score" : 14}
]
}

17
Filtrer les données
▪Afficher les restaurants du quartier « Brooklyn »
[Link]( { "borough" : "Brooklyn" } )
▪Afficher seulement le premier document
db. [Link]( )

▪Et pour les compter :


[Link]( ).count()
[Link]( { "borough" : "Brooklyn" } ).count()

▪Combiner plusieurs critères de restriction: Afficher les restaurants du quartier « Brooklyn » et qui font
de la cuisine italienne:
[Link] (
{ "borough" : "Brooklyn",
"cuisine" : "Italian" }
)
18
Filtrer les données
▪ Filtrer une clé imbriquée:
[Link](
{ "borough" : "Brooklyn",
"cuisine" : "Italian",
"[Link]" : "5 Avenue" }
)
▪ Trier le résultat de recherche dans l’ordre croissant
db. [Link]( ).sort({borough : 1})
▪ Trier le résultat de recherche dans l’ordre décroissant
db. [Link]( ).sort({nom: -1})

19
Projeter les données
▪ Afficher quelques champs
db. [Link] ( { } , {borough :1} )
→ Affiche le nom de tous les restaurants ainsi que leurs
identifiants (qui sera affiché automatiquement)
▪ Pour ne pas afficher les id
db. [Link]( { } , {borough :1, _id: 0 } )

20
Affichage : les expressions régulières?
▪ Chercher les restaurants dont le nom commence par s :
db. [Link]( { name : /^s/ } )
Explication
- les deux / pour indiquer le début et la fin de l’expression régulière
- ^ pour indiquer par quoi commence le mot cherché

21
Affichage : les expressions régulières?
Chercher les restaurants dont le nom se termine par k :
[Link]( { name : /k$/ } )

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


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

Chercher les restaurants dont le nom commence par une lettre


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

22
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

23
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)

24
Exemple : $lt
[Link](
{"borough":"Manhattan",
"[Link]":{ $lt:10, $not:{$gte:10} } },
{"name":1,"[Link]":1, "_id":0}
)
Résultat
{ "name" : "1 East 66Th Street Kitchen",
"grades" : [
{"score" : 3},
{"score" : 4},
{"score" : 6},
{"score" : 0} ]
} 25
L’opérateur : $elemMatch
Chercher les restaurants qui ont un grade ‘C’ avec un score
inférieur à 40.
[Link](
{
"[Link]" : "C",
"[Link]" : {$lt : 40}
},
{"[Link]":1, "[Link]":1}
);
Problème si on observe le résultat !!
26
Exemple 2 : Résultat
{
"_id" : ObjectId("594b9172c96c61e672dcd695"),
"grades" : [
{"grade" : "B","score" : 21},
{"grade" : "A","score" : 7},
{"grade" : "C","score" : 56}, Pas OK
{"grade" : "B","score" : 27},
{"grade" : "B","score" : 27} ]
}
{ "_id" : ObjectId("594b9172c96c61e672dcd6bc"),
"grades" : [
{"grade" : "A","score" : 9},
{"grade" : "A","score" : 10},
{"grade" : "A","score" : 9},
{"grade" : "C","score" : 32} ] OK
}
27
Exemple 2
▪ Il faut préciser qu’il fallait que ce soit vérifié sur chaque élément
▪ La vérification se fait sur l’intérieur de la liste, pas sur chaque
élément de la liste.
▪ $elemMatch : l’opérateur permet de faire une vérification
instance par instance
[Link](
{ "grades" :
{ $elemMatch :
{ "grade" : "C", "score" : {$lt :40} } } },
{"[Link]" : 1,"[Link]" : 1}
);
28
Exemple 2 : Résultat
[Link]({
"grades" : {
$elemMatch : {
"grade" : "C",
"score" : {$lt :40}
}
}
},
{"[Link]" : 1,"[Link]" : 1}
);

{
"_id" : ObjectId("594b9172c96c61e672dcd6bc"),
"grades" : [
{"grade" : "A","score" : 9},
{"grade" : "A","score" : 10},
{"grade" : "A","score" : 9},
{"grade" : "C","score" : 32}
]
} 29
Affichage : Distinct
Afficher les différents quartiers de New York
[Link]("borough")
Résultat
[ "Bronx",
"Brooklyn",
"Manhattan",
"Queens",
"Staten Island",
"Missing"
]

30
Opérateurs logiques

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

31
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 âgés de plus de 30 ans


[Link]({"age":{$gt:30}})

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


[Link](
{ $and : [ { age: { $gte:20 }},
{ age: { $lte:30 }} ] }
)
32
Gestion des documents: Modification
Pour modifier, on peut utiliser un des opérateurs suivants :
▪ $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
▪ $rename : pour renommer un champ
▪ $min : pour modifier la valeur d’un champ si elle est supérieure à la
valeur spécifiée par min (et inversement pour max) ..
33
Exemple : $set
> [Link] ({"nom": "Salah"},
{$set: {ville: " Sousse"}} )
RQ: On peut aussi utiliser le save()

Explication
▪ Sélectionne les documents dont le champ nom est égal à Salah.
▪ Pour ce document, la valeur Sousse sera affectée pour le champ ville s’il existe.
▪ Sinon, le champ ville sera créé avec la valeur Sousse.

34 34
Exemple : $unset
Soit le document suivant:
{{ _id: 1, nom: “Ali", salaire : 400},
{ _id: 16, nom: “Salah", salaire : 250} }

> [Link] ( {nom: "Ali "},


{$unset: {salaire: " "}} )
Explication
Supprime la colonne « salaire » pour le document dont le nom est « Ali »
Résultat
{{ _id: 1, nom: “Ali"},
{ _id: 16, nom: “Salah", salaire : 250} }
35 35
Exemple : $inc
Soit le document suivant:
{
_id: 1,
libelle: "abc123",
quantité: 10,
dimensions: {
longueur: 2,
largeur: 3.5
}
}

> [Link]({ libelle: "abc123" },


{ $inc: { quantité: -2, " [Link]": 1 } } )

Explication
▪ Décrémente la valeur de « quantité » de 2 et incrémente la longueur de 1
▪ Sinon, les champs quantité et longueur n’existent pas, ils seront créés avec les valeurs respectives -2 et 1.
36 36
Exemple : $mul
Soit le document suivant:
{ "_id" : 1, libelle : "ABC", "prix" : 10, "quantite" : 25 }

> [Link]({ _id:1 },


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

Explication
• La nouvelle valeur de prix est égale à (10 * 1,25)
• La nouvelle valeur de quantité est égale à (25 * 2)

Résultat
{ "_id" : 1, “libelle" : "ABC", "prix" : 12.5, "quantite" : 50 }
Remarque
Si le champ à modifier n’existe pas dans le document, il sera ajouté et mis à 0. 37 37
Exemple : $min
Soit le document suivant:
> { _id: 1 , highScore : 800 , lowScore: 200 }

> [Link] ( { _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.

Résultat
> { _id: 1, highScore: 800, lowScore: 150 }
38 38
Modification : remove ( )
[Link]( { nom : ‘’Ali’’ } )

Explication
Suppression des documents dont le nom est « Ali »

Explication
Il est possible d’utiliser aussi :
▪ deleteOne()
▪ deleteMany()

39
[Link]({ "_id" : 6040, "name" : "Barry Erin", "gender" : "M", "age" :
32, "occupation" : "doctor/health care",
"movies" : [ { "movieid" : 573, "rating" : 4, "timestamp" : 956704056 }, {
"movieid" : 589, "rating" : 4, "timestamp" : 956704996 }, { "movieid" : 1, "rating"
: 3, "timestamp" : 957717358 }, { "movieid" : 2068, "rating" : 4, "timestamp" :
997453982 }})
[Link]({ "_id" : 1, "title" : "Toy Story (1995)","duration":140,
"genre" : "Children's" })

1- Afficher la liste des collections de la base de données DBMovie


2- Afficher les titres des films de genre « Drama»

3- Afficher les différents genres de films dans la base de données.

4- Combien y a-t-il de films dans la base de données ?

5-Quelle est l’occupation de Davis Everette ? Ecrivez une requête dont la réponse affiche uniquement son
nom et son occupation.

40

Vous aimerez peut-être aussi