0% ont trouvé ce document utile (0 vote)
51 vues16 pages

Introduction à MongoDB et JSON

Transféré par

insaf.limam4
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)
51 vues16 pages

Introduction à MongoDB et JSON

Transféré par

insaf.limam4
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

Imbrication avec Json et Mongo

(base de données orientée


document)

Paternité - Partage des Conditions Initiales à l'Identique : [Link]


Table des matières

I - Cours 3
1. Exemple de base de données orientée document avec MongoDB..........................3
1.1. Présentation de MongoDB ................................................................................................................3
1.2. Installation et démarrage de MongoDB ............................................................................................4
1.3. Créer des bases de données et des collections ................................................................................4
1.4. Insertion des documents ..................................................................................................................5
1.5. Trouver des documents ....................................................................................................................6

2. Interroger Mongo en JavaScript ................................................................................6


2.1. Interroger Mongo en JavaScript .......................................................................................................6

II - Exercice 7
1. Exercice : Au ciné avec Mongo I ................................................................................7
2. Exercice : Au ciné avec Mongo II ..............................................................................11
Contenus annexes 13
Glossaire 15
Index 16

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


2
étudiants de l'UTC, 2013-2016)
Cours I

1. Exemple de base de données orientée document avec MongoDB


1.1. Présentation de MongoDB
MongoBD est une base de données open source NoSQL orientée document. Elle stocke des données au
format JSON (en fait BSON, qui est une version binaire de JSON).
Le serveur MongoDB est organisé en plusieurs databases :
Chaque database contient des collections.
Chaque collection contient des documents.
Chaque document est au format JSON et contient donc des propriétés.

Comparaison SQL / MongoDB

SQL MongoDB

base de données et/ou schéma base de données

table collection

enregistrement document

attribut (atomique) propriété (chaîne, entier, tableau, structure)

Schema-less
C'est une base schema-less, aussi une collection peut contenir des documents de structures différentes
et il n'est pas possible de définir la structure a priori d'une collection. La structure d'une collection n'est
donc définie que par les document qui la compose, et elle peut évoluer dynamiquement au fur et à
mesure des insertions et suppressions.

Identification clé / valeur


Chaque document est identifié par un identifiant nommé _id unique pour une collection, fonctionnant
comme une clé primaire artificielle.

Architecture
MongoDB fonctionne a minima sous la forme d'un serveur auquel il est possible de se connecter avec
un client textuel (mongo shell).
MongoDB peut être distribuée sur plusieurs serveurs (partitionnement horizontal ou sharding) et
accédée à travers de multiples couches applicatives (langages, API...)

Complément

[Link]

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


3
étudiants de l'UTC, 2013-2016)
Cours

1.2. Installation et démarrage de MongoDB


MongoDB est disponible sur Windows, Mac OS X et Linux : [Link]
ion
L'installation présentée ici est uniquement destinée à un contexte d'apprentissage, elle permet
l'installation d'un serveur sur une machine Linux (ou Mac OS X) sans privilèges utilisateurs et
l'exploitation de ce serveur avec un client textuel CLI∗ situé sur la même machine.

Installation du serveur et du client


Installer MongoDB Community Edition sur son système.
Exemple sous Debian : apt-get install mongodb-org après avoir déclaré le dépôt MongoDB.
[Link]

Démarrage d'un serveur Mongo


Créer un espace de stockage en lecture écriture pour la base de données (exemple : mkdir
~/mongodata)
Lancer le serveur MongoDB sur le port standard 27017 : mongod --dbpath ~/mongodata

Démarrage du client CLI Mongo (mongo shell)


Pour se connecter à un serveur MongoDB sur le port standard : mongo --host nom-du-
serveur (par exemple : mongo --host localhost)

Test
Une fois connecté exécuter le code suivant pour vérifier le bon fonctionnement de la base :
1 [Link]({ "test":"Hello World !" })
2 [Link]({}, {_id:0})

Le résultat attendu est le suivant, la clé générée étant bien entendu différente :
{ "test" : "Hello World !" }

Complément

[Link]

1.3. Créer des bases de données et des collections

Créer une base et une collection Fondamental

MongoDB est une base schema-less, la création des bases et des collections est dynamique lors d'une
première insertion de données.

Méthode

Pour créer une base de données il faut exécuter une instruction use sur une nouvelle base de données,
puis donner un ordre d'insertion d'un premier document JSON avec insert.

Exemple

use db1
[Link]( { "x":1 } )
1
[Link]

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


4
étudiants de l'UTC, 2013-2016)
Cours

Catalogue de données Syntaxe

On peut voir la liste des bases de données avec :


show dbs
On peut voir la liste des collections de la base de données en cours avec :
show collections
On peut voir le contenu d'une collection avec :
[Link]()

Complément

[Link]

1.4. Insertion des documents


L'insertion de données dans une base MongoDB se fait avec l'instruction
[Link](Document JSON).
Si la collection n'existe pas, elle est créée dynamiquement.
L'insertion associe un identifiant (_id) à chaque document de la collection.

Exemple

1 [Link](
2{
3 "nom":"Honkytonk Man",
4 "realisateur":{
5 "nom":"Eastwood",
6 "prenom":"Clint"
7 },
8 "annee":1982,
9 "acteurs":[
10 {
11 "nom":"Eastwood",
12 "prenom":"Kyle"
13 },
14 {
15 "nom":"Eastwood",
16 "prenom":"Clint"
17 }
18 ]
19 }
20 )

Complément

[Link]
[Link]

1
[Link]
2
[Link]

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


5
étudiants de l'UTC, 2013-2016)
Cours

1.5. Trouver des documents


La recherche de données dans une base MongoDB se fait avec l'instruction
[Link](Document JSON, document JSON), avec :
le premier document JSON définit une restriction ;
le second document JSON définit une projection (ce second argument est optionnel).

Restriction Exemple

1 [Link]({"nom":"Honkytonk Man"})

retourne les document JSON tels qu'ils ont à la racine un attribut "nom" avec la valeur "Honkytonk
Man".

Restriction et projection Exemple

1 [Link]({"nom":"Honkytonk Man"}, {"nom":1, "realisateur":1} )

retourne les document JSON tels qu'ils ont à la racine un attribut "nom" avec la valeur "Honkytonk
Man", et seul les attributs situés à la racine "nom" et "realisateur" sont projetés (en plus de l'attribut
"_id" qui est projeté par défaut).

Complément

[Link]
[Link]

2. Interroger Mongo en JavaScript


2.1. Interroger Mongo en JavaScript
Le console mongo permet dʼexécuter des programme JavaScript avec instruction load.
1 //[Link]
2 print("Hello world");
1 > load("[Link]")

Parcours d'un résultat de requête Mongo


1 //[Link]
2 conn = new Mongo();
3 db = [Link]("db1");
4
5 recordset = [Link]({"liked":{$elemMatch:{"star":3}}}, {"_id":0,
"[Link]":1})
6
7 while ( [Link]() ) {
8 printjson( [Link]() );
9}

Complément

[Link]

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


6
étudiants de l'UTC, 2013-2016)
Exercice II

1. Exercice : Au ciné avec Mongo I


[1h30]
Soit les données suivantes représentant des films de cinéma.
1 [Link]()
2
3 [Link](
4{
5 nom:"Goodfellas",
6 annee:1990,
7 realisateur:{nom:"Scorsese", prenom:"Martin"},
8 acteurs:
9 [
10 {nom:"De Niro", prenom:"Robert"},
11 {nom:"Liotta", prenom:"Ray"},
12 {nom:"Pesci", prenom:"Joe"}
13 ]
14 })
15
16 [Link](
17 {
18 nom:"The Godfather",
19 annee:1972,
20 realisateur:{nom:"Coppola", prenom:"Francis Ford"},
21 acteurs:
22 [
23 {nom:"Pacino", prenom:"Al"},
24 {nom:"Brando", prenom:"Marlon"},
25 {nom:"Duvall", prenom:"Robert"}
26 ]
27 })
28
29 [Link](
30 {
31 nom:"Million Dollar Baby",
32 realisateur:{nom:"Eastwood", prenom:"Clint"},
33 acteurs:
34 [
35 {nom:"Swank", prenom:"Hilary"},
36 {nom:"Eastwood", prenom:"Clint"}
37 ]
38 })
39
40 [Link](
41 {
42 nom:"Gran Torino",
43 annee:2008,
44 realisateur:{nom:"Eastwood", prenom:"Clint"},

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


7
étudiants de l'UTC, 2013-2016)
Exercice

45 acteurs:
46 [
47 {nom:"Vang", prenom:"Bee"},
48 {nom:"Eastwood", prenom:"Clint"}
49 ]
50 })
51
52 [Link](
53 {
54 nom:"Unforgiven",
55 realisateur:{nom:"Eastwood", prenom:"Clint"},
56 acteurs:
57 [
58 {nom:"Hackman", prenom:"Gene"},
59 {nom:"Eastwood", prenom:"Clint"}
60 ]
61 })
62
63 [Link](
64 {
65 nom:"Mystic River",
66 realisateur:{nom:"Eastwood", prenom:"Clint"},
67 acteurs:
68 [
69 {nom:"Penn", prenom:"Sean"},
70 {nom:"Bacon", prenom:"Kevin"}
71 ]
72 })
73
74 [Link](
75 {
76 nom:"Honkytonk Man",
77 realisateur:{nom:"Eastwood", prenom:"Clint"},
78 annee:1982,
79 acteurs:
80 [
81 {nom:"Eastwood", prenom:"Kyle"},
82 {nom:"Bloom", prenom:"Verna"}
83 ]
84 })
85
86 [Link]()

L'objectif est d'initialiser une base MongoDB avec ce script, puis d'écrire les requêtes MongoDB
permettant de répondre aux questions suivantes.

Question 1
Créer une nouvelle base MongoDB et exécuter le script. Nommez votre base par votre nom de famille ou
votre login sur la machine par exemple.
Indice :
Pour créer une base de données, utiliser l'instruction use myNewDatabase, puis exécuter au moins
une instruction d'insertion.
Indice :
Créer des bases de données et des collections (cf. p.4)

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


8
étudiants de l'UTC, 2013-2016)
Exercice

Question 2
Quels sont les films sortis en 1990 ?
Indice :
Trouver des documents (cf. p.6)
Indice :
[Link](document JSON)
Indice :
La syntaxe JSON (cf. p.13)
Indice :
[Link]({"attribute":"value"})

Question 3
Quels sont les films sortis avant 2000 ?
Indice :
[Link]
Indice :
On utilisera l'objet {$lt:value} à la place de la valeur de l'attribut à tester ($lt pour lesser than).

Question 4
Quels sont les films réalisés par Clint Eastwood ?
Indice :
On utilisera un objet comme valeur.

Question 5
Quels sont les films réalisés par quelqu'un prénommé Clint ?
Indice :
Utiliser le navigateur de propriété des objets point : [Link].

Question 6
Quels sont les films réalisés par quelqu'un prénommé Clint avant 2000 ?
Indice :
Utiliser une liste de conditions attribut:valeur pour spécifier un AND (et logique) :
[Link]({"attribute1":"value1", "attribute2":"value2"})

Question 7
Quels sont les films dans lesquels joue Clint Eastwood ?
Indice :
[Link]

Question 8
Quels sont les films dans lesquels joue un Eastwood ?

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


9
étudiants de l'UTC, 2013-2016)
Exercice

Question 9
Quels sont les noms des films dans lesquels joue un Eastwood ?
Indice :
Pour gérer la projection, utiliser un second argument de la clause find() :
[Link]({document JSON de sélection }, {document JSON de
projection})
avec document JSON de projection de la forme : {"attribut1":1, "attribut2":1...}
Indice :
Les identifiants sont toujours affichés par défaut, si on veut les supprimer, on peut ajouter la clause
_id:0 dans le document de projection.

Question 10
Compléter le programme JavaScript suivant afin d'afficher les titre selon le format suivant :
1- Million Dollar Baby
2- Gran Torino
3- Unforgiven
4- Honkytonk Man

Indice :
1 conn = new Mongo();
2 db = [Link]("...");
3
4 recordset = ...
5
6 while ( [Link]() ) {
7 film = [Link]() ;
8 print("- ", ...);
9}

On veut à présent ajouter une nouvelle collection permettant de gérer des utilisateurs et leurs
préférences. Pour chaque utilisateur on gérera un pseudonyme, et une liste de films préférés avec une
note allant de une à trois étoiles.

Question 11
Ajouter trois utilisateurs préférant chacun un ou deux films.
On utilisera les identifiants des films pour les référencer.
Indice :
Insertion des documents (cf. p.5)
Indice :
[Link]

1
[Link]

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


10
étudiants de l'UTC, 2013-2016)
Exercice

2. Exercice : Au ciné avec Mongo II


[30 min]
Soit les données suivantes représentant des films de cinéma et des avis d'utilisateurs concernant ces
films.
1 [Link]()
2
3 [Link](
4{
5 nom:"Goodfellas",
6 annee:1990,
7 realisateur:{nom:"Scorsese", prenom:"Martin"},
8 })
9
10 [Link](
11 {
12 nom:"The Godfather",
13 annee:1972,
14 realisateur:{nom:"Coppola", prenom:"Francis Ford"},
15 })
16
17 [Link](
18 {
19 nom:"Million Dollar Baby",
20 realisateur:{nom:"Eastwood", prenom:"Clint"},
21 })
22
23 [Link](
24 {
25 nom:"Gran Torino",
26 annee:2008,
27 realisateur:{nom:"Eastwood", prenom:"Clint"},
28 })
29
30 [Link]()
1 [Link]()
2
3 [Link](
4{
5 "pseudo":"Stph",
6 "liked" :
7 [
8 {"film":ObjectId("590c366d70f50381c920ca71"),"star":3},
9 {"film":ObjectId("590c366d70f50381c920ca72"),"star":1}
10 ]
11 }
12 )
13
14 [Link](
15 {
16 "pseudo":"Luke",
17 "liked" :
18 [
19 {"film":ObjectId("590c366d70f50381c920ca71"),"star":2}
20 ]
21 }
22 )
23
24 [Link](

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


11
étudiants de l'UTC, 2013-2016)
Exercice

25 {
26 "pseudo":"Tuco",
27 "liked" :
28 [
29 {"film":ObjectId("590c366d70f50381c920ca73"),"star":3}
30 ]
31 }
32 )
33
34 [Link]()

Question 1
Critiquer cette insertion mobilisant les identifiants des films ? Pourquoi n'est ce pas reproductible ?
Imaginez deux solutions.

Question 2
Pourquoi trouver les titres de ces films n'est pas trivial avec Mongo (si, comme dans l'énoncé initial on a
pas stocké le nom du film comme clé de référencement dans la collection User) ?

Question 3
On cherche à présent les identifiants des films qui sont aimés au moins une fois avec 3 étoiles.
On essaie cette requête : [Link]({"[Link]":3}, {_id:0,
"[Link]":1}), mais elle ne renvoie pas le résultat escompté.
Expliquez pourquoi ? Proposez des solutions.

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


12
étudiants de l'UTC, 2013-2016)
Contenus annexes

1. La syntaxe JSON en bref

Règles syntaxiques Syntaxe

Il ne doit exister qu'un seul élément père par document contenant tous les autres : un élément
racine.
Tout fichier JSON bien formé doit être :
soit un objet commençant par { et se terminant par },
soit un tableau commençant par [ et terminant par ].
Cependant ils peuvent être vides, ainsi [] et {} sont des JSON valides.
Les séparateurs utilisés entre deux paires/valeurs sont des virgules.
Un objet JSON peut contenir d'autres objets JSON.
Il ne peut pas y avoir d'éléments croisés.

Éléments du format JSON Fondamental

Il existe deux types d'éléments :


Des couples de type "nom": valeur, comme l'on peut en trouver dans les tableaux associatifs.
Des listes de valeurs, comme les tableaux utilisés en programmation.

Valeurs possibles Définition

Primitifs : nombre, booléen, chaîne de caractères, null.


Tableaux : liste de valeurs (tableaux et objets aussi autorisés) entrées entre crochets, séparées
par des virgules.
Objets : listes de couples "nom": valeur (tableaux et objets aussi autorisés) entrés entre
accolades, séparés par des virgules.

Exemple

1{
2 "nom cours" : "NF29",
3 "theme" : "ingenierie documentaire",
4 "etudiants" : [
5 {
6 "nom" : "Norris",
7 "prenom" : "Chuck",
8 "age" : 73,
9 "pays" : "USA"
10 },

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


13
étudiants de l'UTC, 2013-2016)
Contenus annexes

11 {
12 "nom" : "Doe",
13 "prenom" : "Jane",
14 "age" : 45,
15 "pays" : "Angleterre"
16 },
17 {
18 "nom" : "Ourson",
19 "prenom" : "Winnie",
20 "age" : 10,
21 "pays" : "France"
22 }
23 ]
24 }

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


14
étudiants de l'UTC, 2013-2016)
Glossaire

CLI (Interface en ligne de commande)


Une interface en ligne de commande (en anglais command line interface) est une interface homme-
machine dans laquelle la communication entre l'utilisateur et l'ordinateur s'effectue en mode
texte.
[Link]

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


15
étudiants de l'UTC, 2013-2016)
Index

JSON ..........................................13

Stéphane Crozat (Contributions : U. Meyer, A. Sonko, H. Carrel-Billiard, M. Uzan, C. Fecherolle, les


16
étudiants de l'UTC, 2013-2016)

Vous aimerez peut-être aussi