Base de données NoSQL
◼Concepts
• Volumétrie
✓ Les bases de données NoSQL traitent de très grandes quantités
de données plusieurs tera-octets
• Scalabilité
✓ Avec explosion de taille de données à gérer, BD traditionnelles
fournissent pas de temps de réponses satisfaisant, 2 solutions:
◼ Augmenter les ressources de la machine (puissance du processeur,
mémoire, etc) : scalabilité verticale
◼ Utiliser des clusters de machines (en théorie augmentation illimité des
capacités): scalabilité horizontale
✓ Au-délà d’une certaine taille de données, seule la scalabilité
horizontale est plausible 1
Base de données NoSQL - MongoDB
◼Présentation
• Développé depuis 2007 par MongoDB, travaillant sur
✓ Système de Cloud Computing, Informatique à données réparties
✓ Similitude au service Google App Engine
✓ 1ère version industrielle la 1.4, en 2010
• Base de données open source orientée documents
✓ Les données sont des documents
◼ Stockés en Binary JSON(BSON)
◼ Documents similaires rassemblés dans des collections
◼ Pas de schéma des documents définis en amont
◼ Document contient (généralement) l’ensemble des informations (pas ou
très peu de jointure à faire)
ASSALE Adjé Louis Big Data NoSQL MongoDB 2
Base de données NoSQL - MongoDB
◼Présentation
• Point sur JSON
✓ JavaScript Object Notation créé en 2005,
✓ Utilise une notation appelée littéral
✓ Format d’échange de données structurées léger
✓ Schéma des données non connu (contenu dans les données)
✓ Basé sur 2 notions :
◼ Collection de couples clé/valeur
◼ Liste de valeurs ordonnées
✓ Structures possibles :
◼ Objet (couple clé/valeur) :
◼ { } { "nom": "louis", "age": 14 }
3
Base de données NoSQL - MongoDB
◼Présentation
• Point sur JSON
✓ Structures possibles :
◼ Tableau (collection de valeurs):
◼ [ ] [1, 5, 23]
◼ Une valeur dans un objet ou tableau peut être elle-même un littéral
✓2 types atomique (string et number) et 3 constantes (true, false,
null)
• BSON : extension de JSON
✓ Quelques types supplémentaires (identifiant spécifique, binaire,
date, …)
✓ Distinction entre un entier et un réel
4
Base de données NoSQL - MongoDB
◼Présentation
• Notion de base de données
✓ Conteneur physique pour les collections
✓ Chaque base de données obtient son propre ensemble de
fichiers sur le système de fichiers
✓ Un seul serveur MongoDB a généralement plusieurs bases de
données
• Collection
✓ Groupe de documents MongoDB d’une table RDBMS
✓ Elle est dans une seule base de données
✓ Les documents d’une collection peuvent avoir ≠ champs
✓ Documents d’une collection ont objectif similaire ou connexe
5
Base de données NoSQL - MongoDB
◼Présentation
• Document
✓ Ensemble de paires clé-valeur
✓ Les documents ont un schéma dynamique (les documents n’ont
pas le même ensemble de champs ou structure)
✓ Champs communs dans les documents d’une collection peuvent
contenir différents types de données
• Relation entre terminologie SGBDR et MongoDB
ASSALE Adjé Louis Big Data NoSQL MongoDB 6
Base de données NoSQL - MongoDB
◼Présentation
• Relation entre terminologie SGBDR et MongoDB
Serveur et client de base de données
mysqld / Oracle Mongod
mysql / sqlplus Mongo
SGBDR MongoDB
Base de données Base de données
Table Collection
Tuple / ligne Document
colonne Champ
Jointure de table Documents intégrés
Clé primaire (clé par défaut _id fournie par MongoDB lui-
Clé primaire
même)
ASSALE Adjé Louis Big Data NoSQL MongoDB 7
Base de données NoSQL - MongoDB
◼Présentation
• Exemple de document
✓ Structure de document d’un site blog
qui est paire clé/valeur séparée par des
virgules
✓ _id : nombre hexadécimal assurant
l’unicité de chaque document
◼ On peut fournir _id lors de l’insertion d’1
document sinon MongoDB le fait
◼ _id est sur 12 octets :
◼ 4 premiers pour l’horodatage
◼ 3 suivants ID de la machine
◼ 2 suivants ID du processus serveur
8
◼ 3 restants valeur incrémentielle
Base de données NoSQL - MongoDB
◼Installation et configuration
• Téléchargement de MongoDB
✓ Lien : [Link]
• Installation
✓ Sous Windows
◼ Double_cliquer sur le fichier .msi
◼ Et suivre les étapes
◼ Définir le chemin d’accès au répertoire bin de mongoDB dans la
variable d’environnement PATH de Windows
✓ Sous Linux
◼ Voir fiche de TP : installation de mongoDB sous Ubuntu
ASSALE Adjé Louis Big Data NoSQL MongoDB 9
Base de données NoSQL - MongoDB
◼Installation et configuration
• Étapes d’installation sous Windows
✓ Le lancement du fichier .msi donne:
On clique sur « Next »
ASSALE Adjé Louis Big Data NoSQL MongoDB 10
Base de données NoSQL - MongoDB
◼Installation et configuration
• Étapes d’installation sous Windows
✓ On accepte les conditions :
On clique sur Next
ASSALE Adjé Louis Big Data NoSQL MongoDB 11
Base de données NoSQL - MongoDB
◼Installation et configuration
• Étapes d’installation sous Windows
✓ On clique sur « Custom » pour une installation personnalisée :
En cliquant sur
« Complete », les
paramètres d’installation
seront définis par défaut
ASSALE Adjé Louis Big Data NoSQL MongoDB 12
Base de données NoSQL - MongoDB
◼Installation et configuration
• Étapes d’installation sous Windows
✓ À ce niveau, il est possible de spécifier:
• Les composants à
installer
• Le répertoire
d’installation
ASSALE Adjé Louis Big Data NoSQL MongoDB 13
Base de données NoSQL - MongoDB
◼Installation et configuration
• Étapes d’installation sous Windows
✓ On laisse l’option par défaut :
Mongo sera installé comme
service réseau d’utilisateur
ASSALE Adjé Louis Big Data NoSQL MongoDB 14
Base de données NoSQL - MongoDB
◼Installation et configuration
• Étapes d’installation sous Windows
✓ On clique sur « Install », puis « Finish » à la fin:
ASSALE Adjé Louis Big Data NoSQL MongoDB 15
Base de données NoSQL - MongoDB
◼Installation et configuration
• Définir chemin d’accès au répertoire bin dans PATH
✓ Dans l’explorateur Windows on accède au répertoire bin
◼ Puis on fait « Ctrl + C » pour copier le chemin du répertoire bin
ASSALE Adjé Louis Big Data NoSQL MongoDB 16
Base de données NoSQL - MongoDB
◼Installation et configuration
• Définir chemin d’accès au répertoire bin dans PATH
✓ Taper « env »dans la barre de recherche
◼ Cliquer sur « Modifier les variables d’environnement »
◼ Choisir « Variable d’environnement »
ASSALE Adjé Louis Big Data NoSQL MongoDB 17
Base de données NoSQL - MongoDB
◼Installation et configuration
• Définir chemin d’accès au répertoire bin dans PATH
✓ Double-cliquer sur Path dans « variables système », puis
« Nouveau » et « Ctrl + V » pour coller le chemin
ASSALE Adjé Louis Big Data NoSQL MongoDB 18
Base de données NoSQL - MongoDB
◼Installation et configuration
• Répertoire de stockage de données de MongoDB
✓ Par défaut le chemin relatif (à partir du répertoire d’installation)
de ce répertoire est \data\db (à créer)
✓ Possibilité de spécifier un autre chemin en utilisant l’option
--dbpath avec [Link] ;
◼ C:\mongodb\bin\[Link] --dbpath "C:\test\mongo\data"
• Lancement de MongoDB
✓ On exécute le fichier [Link]
◼ C:\mongodb\bin\[Link] - Port par défaut 27017 sur
l’interface locale
• Connexion à mongoDB - Pour se connecter à un serveur sur
port et interface ≠te, utiliser
✓ On exécute le fichier [Link]
paramètres --port et --host 19
Base de données NoSQL - MongoDB
◼Installation et configuration
• Outil [Link]
✓ L’outil [Link] est déprécié, [Link] est préféré
✓ Télécharger : [Link]
✓ Dézipper l’archive dans le dossier d’installation de mongodb
✓ Mettre le chemin du dossier /bin de mongosh dans le PATH
✓ Dorénavant, pour lancer mongodb, faire à l’invite de ligne de
commande:
◼ C:\.....>[Link]
20
Base de données NoSQL - MongoDB
◼Conception
• Conception de modèles de données : 2 types de modèles
✓ Modèle de données intégré
◼ Incorporation de toutes les données associées en un seul document
◼ Appelé modèle de données dénormalisé
◼ Exemple : supposons qu’on ait le détail des employés dans 3 documents
différents : Personnal_details – Contacts – Address, on peut les intégrer
✓ Modèle de données normalisé
ASSALE Adjé Louis Big Data NoSQL MongoDB 21
Base de données NoSQL - MongoDB
◼Conception
• Conception de modèles de données : 2 types de modèles
✓ Modèle de données normalisé
◼ Dans ce modèle, on fait références à des sous-documents
◼ Par exemple, pour le document de l’exemple précédent on aura :
ASSALE Adjé Louis Big Data NoSQL MongoDB 22
Base de données NoSQL - MongoDB
◼Conception
• Conception de modèles de données
✓ Exemple
Supposons qu'un client ait besoin d'une conception de base de données pour son
blog ou site Web . On veut voir les différences entre la conception de schéma
SGBDR et MongoDB. Le site Web a les exigences suivantes.
• Chaque message a un titre, une description et une URL uniques.
• Chaque message peut avoir une ou plusieurs balises.
• Chaque article porte le nom de son éditeur et le nombre total de likes.
• Chaque message contient des commentaires des utilisateurs avec leur nom, leur
message, leur temps de données et leurs goûts.
• Sur chaque article, il peut y avoir zéro ou plusieurs commentaires.
ASSALE Adjé Louis Big Data NoSQL MongoDB 23
Base de données NoSQL - MongoDB
◼Conception
• Conception de modèles de données
✓ Exemple
◼ Dans un SGBDR, on aura au moins 3 tables :
ASSALE Adjé Louis Big Data NoSQL MongoDB 24
Base de données NoSQL - MongoDB
◼Conception
• Conception de modèles de données
✓ Exemple
◼ Dans MongoDB, on aura une collection article ayant la structure
suivante :
ASSALE Adjé Louis Big Data NoSQL MongoDB 25
Base de données NoSQL - MongoDB
◼Création d’objets
• Création d’une base de données
✓ Commade : use <nom_base_de_données>
◼ Crée une nouvelle base de données si elle n’existe pas, sinon MongoDB
utilise la base de données spécifiée (test base de données par défaut)
◼ Exemple : > use mabase crée une nouvelle base de données
switched to db mabase « mabase » et la sélectionne
✓ Commandes db et show dbs :
◼ Afficher la base de données courante : db
◼ Afficher la liste des bases de données ( au moins 1 document) : show
dbs
◼ Afficher l’aide : help
✓ méthode : [Link]() : supprime la base de données en
cours d’utilisation 26
Base de données NoSQL - MongoDB
◼Création d’objets
• Création d’une collection
✓ méthode : [Link](nom, options)
◼ nom : nom de la collection
◼ options (facultatif) : document utilisé pour spécifier la configuration de
la collection
Paramètre Type La description
Nom Chaîne Nom de la collection à créer
(Facultatif) Spécifiez les options concernant la taille de la mémoire et
Options Document
l'indexation
ASSALE Adjé Louis Big Data NoSQL MongoDB 27
Base de données NoSQL - MongoDB
◼Création d’objets
• Création d’une collection
✓ méthode : [Link](nom, options)
◼ Liste des options :
Champ Type La description
(Facultatif) Si true, active une collection plafonnée. La collection plafonnée est une
collection de taille fixe qui écrase automatiquement ses entrées les plus anciennes
Plafonné Booléen
lorsqu'elle atteint sa taille [Link] you specify true, you need to specify size
parameter also.
(Facultatif) Si true, crée automatiquement un index sur le champ _id.s La valeur par
autoIndexId Booléen
défaut est false.
(Facultatif) Spécifie une taille maximale en octets pour une collection plafonnée. If capped
Taille nombre
is true, then you need to specify this field also.
(Facultatif) Spécifie le nombre maximal de documents autorisés dans la collection
Max nombre
ASSALE Adjé Louis plafonnée. Big Data NoSQL MongoDB 28
Base de données NoSQL - MongoDB
◼Création d’objets
• Création d’une collection
✓ méthode : [Link](nom, options)
◼ Exemple 1 : sans options
◼ >[Link]("maCollection")
{"ok" : 1}
>
ASSALE Adjé Louis Big Data NoSQL MongoDB 29
Base de données NoSQL - MongoDB
◼Création d’objets
• Création d’une collection
✓ méthode : [Link](nom, options)
◼ Exemple 2 : avec options
◼ > [Link]("mycol", { capped : true, autoIndexID : true,
size : 6142800, max : 10000 } )
{
"ok" : 0,
"errmsg" : "BSON field '[Link]' is an unknown
field.",
"code" : 40415,
"codeName" : "Location40415“
}
>
◼ Erreur collection non créée
30
Base de données NoSQL - MongoDB
◼Création d’objets
• Création d’une collection
✓ On peut créer automatiquement une collection en insérant un
document
✓ commande : show collections affiche les collections
◼ Exemple :
◼ > show collections
macollection
>
✓ Suppression collection méthode: db.<nom_collection>.drop()
◼ Exemple :
◼ >[Link]()
true
ASSALE Adjé Louis Big Data NoSQL MongoDB 31
Base de données NoSQL - MongoDB
◼Création d’objets
• Création d’un index
✓ On peut créer un index sur les champs d’une collection
◼ syntaxe : [Link](<clé et spécification type
index>,<expression d’unicité>)
◼ Exemple : > [Link]({"user_id":1})
◼ Index unique : > [Link]({"user_id":1},{unique:true})
◼ Index composé unique :
◼ > [Link]( { groupNumber: 1, lastname: 1,
firstname: 1 }, { unique: true } )
◼ 1: les valeurs du champ sont triées dans l’ordre croissant
◼ -1 : dans l’ordre décroissant
ASSALE Adjé Louis Big Data NoSQL MongoDB 32
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Types de données MongoDB
✓ String : Type de données couramment utilisé : UTF-8 valide
✓ Integer : stocker valeur numérique, 32 ou 64 bits selon serveur
✓ Boolean : true ou false
✓ Double : valeur à virgule flottante
✓ Min/Max keys : utilisé pour comparer valeur aux élément
BSON les plus bas et les plus élevés
✓ Arrays : stocker tableaux, listes ou plusieurs valeurs dans une
seule clé
✓ Timestamp : pour l’horodatage (document modifié ou ajouté)
ASSALE Adjé Louis Big Data NoSQL MongoDB 33
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Types de données MongoDB
✓ Object : utilisé pour document incorporé
✓ Null : utilisé pour stocker valeur nulle
✓ Symbol : comme les chaines mais réservé aux langues
✓ Date : stocker date et heure à la manière d’Unix
✓ Object ID : pour stocker l’ID du document
✓ Binary data : stocker des données binaires
✓ Code : pour stocker le code JavaScript dans le document
✓ Regular expression : ce type de données est utilisé pour
stocker des expressions régulières.
ASSALE Adjé Louis Big Data NoSQL MongoDB 34
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Insertion de documents
✓ Méthode : insert() ou save()
◼ Syntaxe : db.<nom_collection>.insert(document)
◼ Si la collection nom_collection n’existe pas, elle est créée
◼ Exemple 1: créons 2 documents simple j et k et insérons les dans la
collection macollection
◼ > j = { name = "mongo" }
{ "name" = "mongo" }
> k = { x = 3}
{ "x" = 3 }
◼ >[Link](j)
WriteResult({ "nInserted" : 1 })
◼ >[Link](k)
35
WriteResult({ "nInserted" : 1 })
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Insertion de documents
◼ Exemple 2 :
◼ > [Link]({
_id : ObjectId("507f191e810c19729de860ea"),
title: "MongoDB Overview",
description: "MongoDB is no sql database",
by: "tutorials point",
url: "[Link]
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
WriteResult({ "nInserted" : 1 })
◼ >
ASSALE Adjé Louis Big Data NoSQL MongoDB 36
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Insertion de documents
◼ Exemple 3 :on peut passer un tableau de documents
◼ > [Link]([
{
title: "MongoDB Overview",
description: "MongoDB is no sql database",
by: "tutorials point"
},
{
title: "noSQL database",
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
}])
BulkWriteResult({ "nInserted" : 1 })
ASSALE Adjé Louis Big Data NoSQL MongoDB 37
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Insertion de documents
◼ Exemple 3 :on peut passer un tableau de documents
◼ > [Link]([ …
}])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
}) 38
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Insertion de documents
✓ Tout document mongoDB doit avoir un champ « _id » avec une
valeur unique
◼ S’il n’est pas spécifié mongo crée une valeur « ObjectId » unique pour
le champ _id
✓ Méthodes insertOne() et insertMany()
◼ insertOne() : on insère un seul document passé en paramètre
◼ insertMany() : on insère un tableau de documents passé en paramètre
✓ Insertion de +sieurs documents en utilisant boucle « for »
◼ >for (var i = 1; i <= 10; i++) {
[Link] ( { x : i } )
}
ASSALE Adjé Louis Big Data NoSQL MongoDB 39
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Insertion de documents
✓ L’on peut exécuter un script JavaScript (fichier contenant
des commandes MongoDB) à l’aide de l’instruction load()
◼ Syntaxe : load(fichier)
◼ fichier : nom du fichier js précédé du chemin d’accès
◼ Le chemin est relatif par défaut
◼ Exple: soit le fichier [Link] du répertoire d:\donnees_TP
contenant des commandes d’insertion de données dans la
collection cinema
◼ >load("D:/Donnees_TP/[Link]")
◼ Cette commande va exécuter toutes les commandes du
fichier [Link]
ASSALE Adjé Louis Big Data NoSQL MongoDB 40
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Insertion de documents
✓ Manipulation de date, les fonctions : Date(), new Date(xxx), …
◼ Fonction : Date()
◼ Appelée simplement renvoie la date courate
◼ >[Link]({titre:"ah les femmes", auteur:"biton coulibaly",
date_achat:Date()})
WriteResult({ "nInserted" : 1 })
◼ >[Link]().pretty()
{ "_id" : ObjectId("6381d45998113fb3d8ab91a1"),
"titre" : "ah les femmes",
"auteur" : "biton coulibaly",
"date_achat" : "Sat Nov 26 2022 [Link] GMT+0000 (Greenwich)"
} 41
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Insertion de documents
✓ Manipulation de date, les fonctions : Date(), new Date(xxx)
◼ Fonctions : new Date(xxx), new ISODate(xxx) ou ISODate(xxx)
◼ Elles sont toutes identiques car font appel au wrapper ISODate
◼ xxx : spécifie la chaine de la date et heure à la milliseconde près
◼ >[Link]({titre:"ah les hommes", auteur:"biton coulibaly",
date_achat: new Date("2015-11-28")})
WriteResult({ "nInserted" : 1 })
◼ >[Link]({titre:"ah les hommes"}).pretty()
{ "_id" : ObjectId("6381d92d98113fb3d8ab91a2"),
"titre" : "ah les hommes",
"auteur" : "biton coulibaly",
"date_achat" : ISODate("2015-11-28T[Link]Z")} 42
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Insertion de documents
✓ Manipulation de date, les fonctions : Date(), new Date(xxx)
◼ Fonctions : new Date(xxx), new ISODate(xxx) ou ISODate(xxx)
◼ >[Link]({titre:"Tribaliques", auteur:"Henry lopez",
date_achat: ISODate("2015-11-28T[Link].000Z")})
WriteResult({ "nInserted" : 1 })
◼ >[Link]({titre:"Tribaliques"}).pretty()
{
"_id" : ObjectId("6381dbad98113fb3d8ab91a3"),
"titre" : "Tribaliques",
"auteur" : "Henry lopez",
"date_achat" : ISODate("2015-11-28T[Link]Z")
} 43
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Méthode : find()
◼ Affiche tous les documents de manière non structurée
◼ Exemple : >[Link]()
{ "_id" : ObjectId("62af6bdb7578f5eccebaf161"), "name" : "mongo" }
{ "_id" : ObjectId("62af6d807578f5eccebaf162"), "x" : 3 }
{ "_id" : ObjectId("507f191e810c19729de860ea"), "title" : "MongoDB
Overview", "description" : "MongoDB is no sql database", "by" :
"tutorials point", "url" : "[Link] "tags" : [
"mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("62af7ceb7578f5eccebaf163"), "title" : "MongoDB
Overview", "description" : "MongoDB is no sql database", "by" :
"tutorials point" }
{ "_id" : ObjectId("62af7ceb7578f5eccebaf164"), "title" : "noSQL
44
database", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Méthode : find().pretty()
◼ Formate l’affichage des documents
◼ Exemple : >[Link]().pretty()
{ "_id" : ObjectId("62af6bdb7578f5eccebaf161"), "name" : "mongo" }
{ "_id" : ObjectId("62af6d807578f5eccebaf162"), "x" : 3 }
{
"_id" : ObjectId("507f191e810c19729de860ea"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no sql database",
"by" : "tutorials point",
"url" : "[Link]
"tags" : [
"mongodb"
45
"database",
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Méthode find() peut prendre des arguments :
◼ Le 1er pour spécifier la sélection : (documents vérifiant tel critère)
◼ Le 2nd pour spécifier la projection : (les champs à afficher)
◼ On définit une liste de champs avec la valeur 1 ou 0
◼ 1 pour afficher le champ – 0 pour ne pas l’afficher
◼ champ _id s’affiche (défaut), spécifier _id:0 pour ne pas l’afficher
◼ Exemple : afficher uniquement le titre des documents de la catégorie IA
◼ >[Link]({"categorie":"IA"},{"titre":1,"_id":0})
46
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Méthode find() peut prendre des arguments :
◼ Les documents peuvent contenir des documents imbriqués. Dans ce cas,
on peut utiliser la notation pointée « [Link] »
◼ Afficher les films ayant gagné 7 « awards »
◼ >[Link]({"[Link]":7},{title:1,year:1,awards:1,_id:0})
{
" title": "Shunter Island",
{
"year": 2010,
" title": "Iron Man 2",
"awards": {
"year": 2010,
"wins":7,
"awards": {
"nominations":53,
"wins":7,
‘ "text":"7 win & 53 nomination"
"nominations":40,
}
‘ "text":"nominated for 1 Oscar, another 7 wins &
}
40 nomination"
} 47
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Méthode : findOne()
◼ Renvoie un seul document formaté
◼ Exemple : >[Link]({title:"MongoDB Overview"})
{
"_id" : ObjectId("507f191e810c19729de860ea"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no sql database",
"by" : "tutorials point",
"url" : "[Link]
"tags" : [
"mongodb",
"database",
"NoSQL«
48
], …
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Méthodes : limit()
◼ accepte un argument numérique pour limiter le nombre de documents
◼ Syntaxe : db.<nom_collection>.find().limit(nbre)
◼ Exemple : soit la collection mycol suivante :
{_id : ObjectId("507f191e810c19729de860e1"), title: "MongoDB Overview"},
{_id : ObjectId("507f191e810c19729de860e2"), title: "NoSQL Overview"},
{_id : ObjectId("507f191e810c19729de860e3"), title: "Tutorials Point Overview"}
◼ >[Link]({},{"title":1,_id:0}).limit(2) affichera :
{"title":"MongoDB Overview"}
{"title":"NoSQL Overview"}
✓ Méthode : count() renvoie le nombre de documents du résultat
◼ >[Link]({}).count()
3 49
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Méthode : skip()
◼ accepte un argument numérique pour ignorer un nombre de documents
◼ Syntaxe : db.<nom_collection>.find().limit(nbre).skip(nbre)
◼ Exemple : on reprend la collection précédente
◼ >[Link]({},{"title":1,_id:0}).limit(2).skip(1) affichera :
{"title":"NoSQL Overview"}
✓ Méthode : sort({key:1|-1})
◼ Trie les résultats selon le champ key – 1 pour l’ordre croissant
◼ >[Link]({},{"title":1,_id:0}).sort({"title":-1})
{_id : ObjectId("507f191e810c19729de860e3"), title: "Tutorials Point Overview"}
{_id : ObjectId("507f191e810c19729de860e2"), title: "NoSQL Overview"},
{_id : ObjectId("507f191e810c19729de860e1"), title: "MongoDB Overview"}
ASSALE Adjé Louis Big Data NoSQL MongoDB 50
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB : opérateurs
• Opération
Recherche deSyntaxe documents Exemple Équivalent du SGBDR
[Link] ({"by": "tutorials
Égalité {<key>: {$ eg; <valeur>}} où by = 'tutorials point'
✓ Les opérateurs dans lespoint"}). conditions
pretty () :
[Link] ({"aime": {$ lt:
Moins que {<key>: {$ lt: <valeur>}} où aime <50
50}}). pretty ()
[Link] ({"aime": {$ lte:
Inférieur à égal {<key>: {$ lte: <valeur>}} où aime <= 50
50}}). pretty ()
[Link] ({"aime": {$ gt:
Plus grand que {<key>: {$ gt: <valeur>}} où aime> 50
50}}). pretty ()
[Link] ({"aime": {$ gte:
Supérieur à égal {<key>: {$ gte: <value>}} où aime> = 50
50}}). pretty ()
[Link] ({"aime": {$ ne:
Pas égal {<key>: {$ ne: <valeur>}} où aime! = 50
50}}). pretty ()
[Link] ({"nom": {$ in:
Valeurs dans un {<key>: {$ in: [<value1>, Où le nom correspond à l'une des
["Raj", "Ram", "Raghu"]}}).
tableau <value2>, …… <valueN>]}} valeurs de: ["Raj", "Ram", "Raghu"]
pretty ()
Où les valeurs de nom ne sont pas dans
Les valeurs ne sont [Link] ({"nom": {$ nin:
{<key>: {$ nin: <valeur>}} le tableau: ["Ramu", "Raghav"] ou,
pas dans un tableau ["Ramu", "Raghav"]}}). pretty ()
n'existe pas du tout
ASSALE Adjé Louis Big Data NoSQL MongoDB 51
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Et dans mongoDB : $and
◼ Syntaxe :
db.nom_collection.find({$and:[{<key1>:<valeur1>},{<key2>:<valeur2
>}]}).pretty()
◼ Exemple :
◼ >[Link]({$and:[{title:"MongoDB Overview"},{by:
"tutorials point"}]}).pretty()
{
"_id" : ObjectId("507f191e810c19729de860ea"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no sql database",
"by" : "tutorials point",
ASSALE Adjé Louis
"url" : "[Link] … 52
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Ou dans mongoDB : $or
◼ Syntaxe :
db.nom_collection.find({$or:[{<key1>:<valeur1>},{<key2>:<valeur2>
}]}).pretty()
◼ Exemple :
◼ >[Link]({$or:[{x:3},{x: 6}]}).pretty()
{ "_id" : ObjectId("62af84157578f5eccebaf167"), "x" : 3 }
{ "_id" : ObjectId("62af84157578f5eccebaf16a"), "x" : 6 }
✓ And et Or ensemble dans mongoDB
◼ 2 conditions séparées par une virgule, l’une contenant un $or
◼ Expl : >[Link]({x:{$gt:8},$or:[{x:8},{x:9}]})
{ "_id" : ObjectId("62af84157578f5eccebaf16d"), "x" : 9 }
ASSALE Adjé Louis 53
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Pas dans mongoDB : $not
◼ Syntaxe :
db.nom_collection.find({$not:[{<key1>:<valeur1>},{<key2>:<valeur2
>}]}).pretty()
◼ Exemple :
◼ >[Link]({x: {$not:{$gt :3}}}).pretty()
{ "_id" : ObjectId("62af84147578f5eccebaf165"), "x" : 1 }
{ "_id" : ObjectId("62af84157578f5eccebaf166"), "x" : 2 }
{ "_id" : ObjectId("62af84157578f5eccebaf167"), "x" : 3 }
✓ Ni dans mongoDB : $nor
◼ Expl : >[Link]({$nor:[{x:8},{x:9}]})
affiche tout sauf 8 et 9
ASSALE Adjé Louis Big Data NoSQL MongoDb 54
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Opérateurs de recherche dans tableau : $in et $all
◼ Exple: afficher les films avec Leonardo Dicaprio ou Tom Hanks
◼ >[Link]({"actors":{$in:["Leonardo DiCaprio", "Tom Hanks"]}},
{"title":1,"year":1,"actors":1,_id:0}).pretty()
{
" title": "Shunter Island"
"year": 2010 {
"actors": [ "title": "Toy Story 3"
"Leonardo DiCaprio", {
"year": 2010
"Mark Ruffalo", "title": "Saving Mr. Banks"
"actors": [
‘ "Ben Kingsley", "Tom Hanks",
"year": 2013
" Max von Sydow" "actors": [
"Tim Allen",
] "Emma Thompson",
‘ "Joan Cusack"
} "Tom Hanks"
]
]
}
ASSALE Adjé Louis Big Data NoSQL MongoDb } 55
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Opérateurs de recherche dans tableau : $in et $all
◼ Exple : films où figurent Leonardo Dicaprio et Tom Hanks
◼ >[Link]({"actors":{$all:["Leonardo DiCaprio", "Tom Hanks"]}},
{"title":1,"year":1,"actors":1,_id:0}).pretty()
{
"title": "Catch Me If You Can"
"year": 2002
"actors": [
"Leonardo DiCaprio",
"Tom Hanks",
"Christopher Walken",
"Martin sheen"
]
}
ASSALE Adjé Louis Big Data NoSQL MongoDb 56
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Opérateur de recherche : $exists:true|false
◼ Vérifie si les documents possèdent ou non une telle clé (champs)
◼ Les valeurs de $exists sont true (1) le champ existe pour ce document
ou false (0) le champ n’existe pas pour ce document
◼ Exemple : on désire afficher les films dont le champ « type » est précisé
◼ >[Link]({"type":$exists:1})
✓ Recherche avec critère contenant une information
◼ On cherche à afficher les films dont le titre contient le mot "the":
◼ [Link]({"title":/the/});
ASSALE Adjé Louis Big Data NoSQL MongoDb 57
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Recherche dans tableau contenant documents
◼ Soit un schéma contenant les documents de type suivant : {name:'Tom',
age:28, marks: [{"subject":"English", "marks":90}, {"subject":
"Maths", "marks": 100}, {"subject":"Computes", "marks":20}]}
◼ On désire afficher les documents dont le 1er subject (indice 0) de la liste
marks est English. On écrira :
◼ [Link]({"[Link]":"English"},{"name":1,"age":1,"_id":
0});
◼ Il en est de même pour le nième élément (indice n-1)
ASSALE Adjé Louis Big Data NoSQL MongoDb 58
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Le shell MongoDB s’appuie sur un interpréteur JavaScript:
◼ Dans le shell, mongo affiche les 20 premiers, il faut entrer la commande
it pour afficher la suite des résultats
◼ Le résultat d’une requête renvoie un objet JavaScript. soit la base test :
◼ > use test
◼ > [Link]( { name: 'Sylvester' } );
◼ > [Link]( { name: 'Jean-Claude' } );
◼ > [Link]( { name: 'Chuck' } );
◼ On peut déclarer une variable pour récupérer le résultat d’une requête
◼ >var single = [Link]();
◼ >[Link];
Sylvester
ASSALE Adjé Louis Big Data NoSQL MongoDb 59
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Recherche de documents
✓ Le shell MongoDB s’appuie sur un interpréteur JavaScript:
◼ On peut utiliser la méthode forEach() :
◼ >[Link]().forEach(function(single){
print([Link]);
});
Sylvester
Jean-Claude
Chuck
◼ On peut utiliser la boucle while pour parcourir un objet « cursor »
◼ >var c = [Link]()
Sylvester
◼ >while([Link]()) print([Link]())
Jean-Claude
Chuck
ASSALE Adjé Louis Big Data NoSQL MongoDb 60
Base de données NoSQL - MongoDB
◼Travaux Pratiques Nº1
• Voir fiche de TP
ASSALE Adjé Louis Big Data NoSQL MongoDB 61
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Mise à jour de documents
✓ Méthodes : update() et save()
◼ Méthode update() met à jour les valeurs dans le document existant
◼ Syntaxe : db.nom_collection.update(critère, maj_données, multi)
◼ Expl : >[Link]({x:4},{$set:{x:11}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
◼ Qd clé dans maj_données ne figure pas dans le document, la
donnée (clé:valeur) est ajoutée:
expl:>[Link]({x:4},{$set:{y:11}})
la donnée y:11 est ajoutée au document de x:4
◼ Par défaut 1 seul document est mise à jour, pour mettre plusieurs
documents à jour, mettre le paramètre multi à true
>[Link]({x:4},{$set:{y:11}},{multi:true})
ASSALE Adjé Louis Big Data NoSQL MongoDB 62
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Mise à jour de documents
◼ Méthode save() remplace document tant par celui passé en paramètre
◼ Syntaxe :
db.nom_collection.save({_id:ObjectId(),nouvelle_donnée})
◼ Expl : >[Link]({"_id" :
ObjectId("62af84157578f5eccebaf16e"), x:21, y:3, z:43})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
✓ Méthodes : findOneAndUpdate(), updateOne() et updateMany()
◼ La méthode update() est dépréciée, plutôt utiliser les méthodes précitées
◼ Méthode findOneAndUpdate(critère, maj_données) met à jour les
valeurs du document existant
◼ Expl : >[Link]({x:21},{$set:{y:12,z:20}})
ASSALE Adjé Louis Big Data NoSQL MongoDB 63
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Mise à jour de documents
✓ Méthodes : findOneAndUpdate(), updateOne() et updateMany()
◼ Méthode findOneAndUpdate(critère, maj_données)
Expl : >[Link]({x:21},{$set:{y:12,z:20}})
{
"_id" : ObjectId("62af84157578f5eccebaf16e"),
"x" : 21,
"y" : 3,
"z" : 43
}
◼ Méthode updateOne(critère, maj_données) met à jour un seul document
correspondant au critère donné
◼ Expl :>[Link]({x:5},{$set:{x:14,a:3}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount"
64
:1
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Mise à jour de documents
✓ Méthodes : findOneAndUpdate(), updateOne() et updateMany()
◼ Méthode updateMany(critère, maj_données) met à jour tous les
documents correspondant au critère donné
◼ Expl :>[Link]({x:{$gt:5}},{$set:{x:0}})
{ "acknowledged" : true, "matchedCount" : 7, "modifiedCount" : 7
}
✓ La méthode : replaceOne(critère, maj_données)
◼ Remplace un seul document
◼ Expl :>[Link]({x:0},1)
WriteResult({ "nRemoved" : 1 })
ASSALE Adjé Louis Big Data & NoSQL MongoDB 65
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Opérateurs avancés de mise à jour de documents
✓ opérateur : $unset
◼ Supprime une clé (champ) dans le document
◼ Expl :>[Link]({},{$unset: {"type":1}})
supprime le champ type pour les documents qui en possèdent
✓ opérateur : $push
◼ Ajoute une valeur à la fin d’un tableau
◼ Expl: >[Link]({name:'Tom'},{$push:{surnom:'Tommy'})
ajout de Tommy au tableau de surnom de Tom
◼ L’opérateur $addToSet évite les doublons
✓ Opérateur : $pull
◼ Supprime un élément spécifique du tableau
◼ Expl: >[Link]({name:'Tom'},{$pull:{surnom:'Tommy'})66
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Opérateurs avancés de mise à jour de documents
✓ opérateur : $pushAll
◼ Ajoute plusieurs valeurs à la fin d’un tableau
◼ Expl: >[Link]({name:'Tom'},{$pushAll:{surnom:['Tommy',
'Jerry', 'Alias']})
✓ Opérateur : $pullAll
◼ Supprime plusieurs valeurs précises du tableau
◼ Expl: >[Link]({name:'Tom'},{$pullAll:{surnom:['Tommy',
'Alias’]})
✓ Mettre à jour un élément d’un tableau (selon l’indice)
◼ Modifier à 80 la valeur du 2nd élément (indice 1) d’une liste
◼ Soit le schéma : {name:'Tom', age:28, marks:[50,60,70]}
◼ >[Link]({name:'Tom'},{$set: {'marks.1':80}}) 67
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Opérateurs avancés de mise à jour de documents
✓ opérateur : $inc
◼ Ajoute une valeur à un champ numérique
◼ Expl :>[Link]({nom:'The Godfather'},{$inc: {"annee":2}})
incrément de 2 l’année du film « The Godfather »
✓ Opérateur : $pop
◼ Supprime la 1ère ou la dernière valeur du tableau
◼ Soit le schéma : {name:'Tom', age:28, marks:[50,60,70]}
◼ >[Link]({name:Tom}, {$pop: {marks:-1}})
supprime le 1er élément du tableau c-à-d 50
◼ >[Link]({name:Tom}, {$pop: {marks:1}})
supprime le dernier élément du tableau c-à-d 70
68
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Mise à jour de documents incorporés, opérateur $
◼ Soit le schéma : {name:'Tom', age:28, marks:[50,60,70]}
◼ Mettre à jour les marques de Tom à 55 où elles étaient à 50
◼ >[Link]({name:'Tom', marks:50},{$set:{"marks.$":55}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
✓ Tableau contenant documents
◼ Soit le schéma : {name:'Tom', age:28, marks: [{"subject":"English",
"marks":90}, {"subject": "Maths", "marks": 100},
{"subject":"Computes", "marks":20}]}
◼ Mettre à jour les marques anglaises de Tom à 85
◼ >[Link]({name:'Tom', "[Link]": "English"},
{$set:{"marks.$.marks":85}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
69
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Mise à jour de documents incorporés, opérateur $
✓ Pour le schéma :
◼ {"_id:1", "grades" : [80, 85, 90]}
{"_id":2, "grades" : [88, 90,92]}
{"_id":3, "grades" : [85, 100,90]}
◼ Mettre à jour 80 à 82 dans le tableau grades du 1er document
◼ >[Link]({_id:1, grades:80},{$set: {"grades.$":82}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
◼ > [Link]().pretty()
{ "_id" : 1, "grades" : [ 82, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
70
Base de données NoSQL - MongoDB
◼Utilisation de MongoDB
• Suppression de documents
✓ Méthode : remove(critère, [juste_un])
◼ Supprime les documents vérifiant le critère ou 1 seul quand le paramètre
juste_un est défini à true ou 1
◼ Expl :>[Link]({x:0},1)
WriteResult({ "nRemoved" : 1 })
◼ La méthodes remove() est dépréciée, utiliser les méthodes ci-après
✓ Méthode : deleteOne(critère)
◼ Supprime le 1er document vérifiant le critère
✓ Méthode : deleteMany(critère)
◼ Supprime tous les documents vérifiant le critère
ASSALE Adjé Louis Big Data & NoSQL MongoDB 71
Base de données NoSQL - MongoDB
◼Travaux Pratiques Nº2
• Voir fiche de TP
ASSALE Adjé Louis Big Data NoSQL MongoDB 72
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• But :
✓ Traiter les enregistrements de données et renvoyer les
résultats calculés
✓ mongoDB offre pour cela un framework d’agrégation qui
permet de filtrer les résultats, de les compiler ou même
de les transformer
✓ Il y a trois façons d’utiliser les frameworks d’agrégation :
◼ Les fonctions dédiées
◼ Le pipeline d’agrégation
◼ Le mapReduce
ASSALE Adjé Louis Big Data NoSQL MongoDB 73
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Les fonctions dédiées
✓ Méthode count():
◼ Compte le nombre d’éléments respectant le critère fourni
◼ Syntaxe : [Link](<critère>)
◼ Exemple : [Link]({'year':1987})
✓ Méthode distinct():
◼ Permet d’afficher le résultat sans doublons
◼ Syntaxe : [Link](<champ>,<critère>)
◼ Exemple : [Link]('genre', {year:1987})
✓ Méthode group() : elle n’est plus supportée elle est
remplacée par $group
ASSALE Adjé Louis Big Data NoSQL MongoDB 74
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Le pipeline d’agrégation
✓ Il s’utilise à travers un tableau d’opérations pouvant
contenir les éléments suivants:
◼ $project : redéfinition des documents (si nécessaire)
◼ $match : restriction sur les documents à utiliser
◼ $group : regroupements et calculs à effectuer
◼ $sort : tri sur les agrégats
◼ $unwind : découpage de tableaux
◼ …
ASSALE Adjé Louis Big Data NoSQL MongoDB 75
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Syntaxe : [Link](pipeline, options)
◼ pipeline : array ou tableau (une séquence d’opérations ou
d’étapes d’agrégation de données)
◼ options : facultatif (document disponible uniquement si le
pipeline est présent sous forme de tableau)
✓ Exemples simples : soient les données suivantes
> [Link]({ cr_dr : "D", amount : 100, fee : 2});
> [Link]({ cr_dr : "C", amount : 100, fee : 2});
> [Link]({ cr_dr : "C", amount : 10, fee : 2});
> [Link]({ cr_dr : "D", amount : 100, fee : 4});
> [Link]({ cr_dr : "D", amount : 10, fee : 2});
> [Link]({ cr_dr : "C", amount : 10, fee : 4});
> [Link]({ cr_dr : "D", amount : 100, fee : 2});
ASSALE Adjé Louis Big Data NoSQL MongoDB 76
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Exemples simples :
◼ On désire afficher le nombre d’opérations de débit. Une façon
simple de le faire est :
◼ >[Link]({cr_dr : "D"}); ou
◼ >[Link]({cr_dr : "D"}).count();
◼ Mais si on ne connait pas les valeurs possibles de cr_dr, alors
utiliser une agrégation s’avère utile (opérateur $group).
◼ >[Link]([{$group : {
_id: '$cr_dr', //grouper par type de transaction
//ajouter 1 pour chaque document compté de ce type
count : {$sum : 1}
}}]);
ASSALE Adjé Louis Big Data NoSQL MongoDB 77
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Exemples simples :
◼ Le résultat est :
◼ { "_id" : "C", "count" : 3 }
{ "_id" : "D", "count" : 4 }
◼ Noter bien dans la requête le $ placé avant le nom du champ
(item) sur lequel s’effectue le regroupement. La syntaxe est
toujours : « _id:$nom_champ » ou « _id:null » (pas de
regroupement)
◼ après le champ de regroupement, on applique une fonction de
calcul dont le nom de champ est choisi arbitrairement. Ici, on a
choisi « count » et la fonction de calcul $sum avec une valeur de
1 pour spécifier que l’on compte
ASSALE Adjé Louis Big Data NoSQL MongoDB 78
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Exemples simples :
◼ On désire sommer les valeurs du champ « amount »
◼ > [Link]([{
$group : {_id : '$cr_dr', //définit le regroupement
count : {$sum : 1}, //compte le nombre
totalAmount : {$sum : '$amount'} //somme the amount
}}]);
◼ Le résultat est :
◼ { "_id" : "C", "count" : 3, "totalAmount" : 120 }
{ "_id" : "D", "count" : 4, "totalAmount" : 310 }
ASSALE Adjé Louis Big Data NoSQL MongoDB 79
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Exemples simples :
◼ On peut calculer sur +sieurs champs: « amount » et « fee »
◼ > [Link]([{
$group : {_id : '$cr_dr',
count : {$sum : 1},
totalAmount : {$sum :{$sum :[ '$amount','$fee']}}
}}]);
◼ Le résultat est :
◼ { "_id" : "C", "count" : 3, "totalAmount" : 128 }
{ "_id" : "D", "count" : 4, "totalAmount" : 320 }
ici, on a fait la somme des amount et fee
ASSALE Adjé Louis Big Data NoSQL MongoDB 80
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Exemples simples :
◼ On veut calculer la moyenne des transactions de débit et crédit
◼ > [Link]([{
$group : {
_id : '$cr_dr',
count : {$sum : 1},
totalAmount : {$sum : { $sum : ['$amount', '$fee']}},
averageAmount : {$avg : { $sum : ['$amount', '$fee']}}
}}])
◼ Le résultat est :
◼ { "_id" : "C", "count" : 3, "totalAmount" : 128, "averageAmount" : 42.66666666 }
◼ { "_id" : "D", "count" : 4, "totalAmount" : 320, "averageAmount" : 80 }
ASSALE Adjé Louis Big Data NoSQL MongoDB 81
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Opérateur : $match
◼ Il permet de simuler les clauses SQL « where » et « having »
◼ Soient les données suivantes :
[Link]({"name":"Adma","dept":"Admin","languages":["german","french","english","hindi"],
"age":40, "totalExp":10});
[Link]({"name":"Anna","dept":"Admin","languages":["english","hindi"],"age":35,
"totalExp":11});
[Link]({"name":"Bob","dept":"Facilities","languages":["english","hindi"],"age":36,
"totalExp":14});
[Link]({"name":"Cathy","dept":"Facilities","languages":["hindi"],"age":31,
"totalExp":4});
[Link]({"name":"Mike","dept":"HR","languages":["english", "hindi",
"spanish"],"age":26, "totalExp":3});
[Link]({"name":"Jenny","dept":"HR","languages":["english", "hindi",
"spanish"],"age":25, "totalExp":3});
ASSALE Adjé Louis Big Data NoSQL MongoDB 82
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Opérateur : $match
◼ On veut les documents du département « Admin »
◼ >[Link]([{$match: {dept:'Admin'}}])
◼ Le résultat est :
{ "_id" : ObjectId("6380f00bf17e7aed2d1b0c68"), "name" : "Adma", "dept" : "Admin", "languages" : [
"german", "french", "english", "hindi" ], "age" : 40, "totalExp" : 10 }
{ "_id" : ObjectId("6380f00bf17e7aed2d1b0c69"), "name" : "Anna", "dept" : "Admin", "languages" : [
"english", "hindi" ], "age" : 35, "totalExp" : 11 }
✓ Opérateur : $project
◼ Permet de spécifier les champs à afficher
◼ >[Link]([{$match:{dept:'Admin'}},
{$project: {_id:0, name:1, dept:1}})
ASSALE Adjé Louis Big Data NoSQL MongoDB 83
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Opérateur : $project
◼ Le résultat est :
◼ { "name" : "Adma", "dept" : "Admin" }
{ "name" : "Anna", "dept" : "Admin" }
✓ Opérateurs : $match et $group ensemble
◼ Afficher tous les départements où l’âge moyen des employés est
supérieur ou égal à 35
◼ >[Link]([{$group: {_id:$dept,
moyenne_age:{$avg:$age}}},
{$match:{moyenne_age:{$gte:35}}} ])
◼ Le résultat est :
◼ { "_id" : "Admin", "moyenne_age" : 37.5 } 84
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Découpage de tableau, opérateur : $unwind
◼ Soit à calculer le nombre de personnes par langue, une 1ère idée
est d’écrire :
◼ >[Link]([ {$group: {_id:"$languages",
nb:{$sum:1}}} ])
◼ Le résultat donne ceci :
◼ { "_id" : [ "english", "hindi" ], "nb" : 2 }
{ "_id" : [ "german", "french", "english", "hindi" ], "nb" : 1 }
{ "_id" : [ "english", "hindi", "spanish" ], "nb" : 2 }
{ "_id" : [ "hindi" ], "nb" : 1 }
◼ Ce qui n’est pas correct, donc l’utilisation de $unwind
ASSALE Adjé Louis Big Data NoSQL MongoDB 85
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ Découpage de tableau, opérateur : $unwind
◼ La requête devient :
◼ >[Link]([ {$unwind: "$languages"},
{$group: {_id:"$languages", nb:{$sum:1}}} ])
◼ Le résultat donne ceci :
◼ { "_id" : "german", "nb" : 1 }
{ "_id" : "french", "nb" : 1 }
{ "_id" : "english", "nb" : 5 }
{ "_id" : "hindi", "nb" : 6 }
{ "_id" : "spanish", "nb" : 2 }
◼ Ce qui est convenable
ASSALE Adjé Louis Big Data NoSQL MongoDB 86
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ autres opérateurs :
◼ $out : renvoie le résultat vers une autre collection
◼ Syntaxe : {$out:"<nom_col>"} collection de la même base
{$out:{db:"<base>", coll:"<collection>"}} dans une
collection d’une autre base
◼ Soit la collection livres suivante :
{ "_id" : 8751, "title" : "The Banquet", "author" : "Dante", "copies" : 2 },
{ "_id" : 8752, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 },
{ "_id" : 8645, "title" : "Eclogues", "author" : "Dante", "copies" : 2 },
{ "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 },
{ "_id" : 7020, "title" : "Iliad", "author" : "Homer", "copies" : 10 }
ASSALE Adjé Louis Big Data NoSQL MongoDB 87
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ autres opérateurs :
◼ $out : renvoie le résultat vers une autre collection
◼ Exemple : [Link]( [{ $group : { _id :
"$author", books: { $push: "$title" } } }, { $out :
"authors" }])
◼ Le résultat est :
{ "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }
{ "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
◼ $push : renvoie un tableau de toutes les valeurs résultantes
◼ Syntaxe : {$push: "$<expr>"} <expr> est un nom de champ
◼ $addToSet : comme $push mais les valeurs sont distinctes
ASSALE Adjé Louis Big Data NoSQL MongoDB 88
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ autres opérateurs :
◼ $max, $min : renvoie le maximum, minimum d’ensemble de
valeurs
◼ Syntaxe : {$min:<expression>} <expression> peut être un
tableau {$min:[<expression1>, <expression2>, …]}
◼ Soit la collection ventes suivante :
{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T[Link]Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-02-03T[Link]Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5, "date" : ISODate("2014-02-03T[Link]Z") }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-02-15T[Link]Z") }
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-02-15T[Link]Z") }
ASSALE Adjé Louis Big Data NoSQL MongoDB 89
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ autres opérateurs :
◼ $max, $min : renvoie le maximum, minimum d’ensemble de
valeurs
◼ Exemple : [Link]([{$group:{_id: "$item",
minQuantity: { $min: "$quantity" }}}])
◼ Résultat :
{ "_id" : "xyz", "minQuantity" : 5 }
{ "_id" : "jkl", "minQuantity" : 1 }
{ "_id" : "abc", "minQuantity" : 2 }
ASSALE Adjé Louis Big Data NoSQL MongoDB 90
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ autres opérateurs :
◼ $size : renvoie le nombre d’éléments de liste de valeurs
◼ Syntaxe : {$size:<expression>} <expression> exprime un
tableau de valeurs
◼ Soit la collection inventaire suivante:
{ "_id" : 1, "item" : "ABC1", "description" : "product 1", colors: [ "blue",
"black", "red" ] }
{ "_id" : 2, "item" : "ABC2", "description" : "product 2", colors: [ "purple" ] }
{ "_id" : 3, "item" : "XYZ1", "description" : "product 3", colors: [ ] }
{ "_id" : 4, "item" : "ZZZ1", "description" : "product 4 - missing colors" }
{ "_id" : 5, "item" : "ZZZ2", "description" : "product 5 - colors is string",
colors: "blue,red" }
ASSALE Adjé Louis Big Data NoSQL MongoDB 91
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ autres opérateurs :
◼ $size : renvoie le nombre d’éléments de liste de valeurs
◼ Exemple : [Link]([{$project: {item: 1,
numberOfColors: { $cond: { if: { $isArray: "$colors" },
then: { $size: "$colors" }, else: "NA"} }}}])
◼ Résultat :
{ "_id" : 1, "item" : "ABC1", "numberOfColors" : 3 }
{ "_id" : 2, "item" : "ABC2", "numberOfColors" : 1 }
{ "_id" : 3, "item" : "XYZ1", "numberOfColors" : 0 }
{ "_id" : 4, "item" : "ZZZ1", "numberOfColors" : "NA" }
{ "_id" : 5, "item" : "ZZZ2", "numberOfColors" : "NA" }
ASSALE Adjé Louis Big Data NoSQL MongoDB 92
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ autres opérateurs :
◼ $count : affiche le nombre d’éléments correspondant à un critère
◼ Syntaxe : {$count:<string>} <string> chaine représentant la
Valeur à afficher
◼ Soit la collection scores suivante:
{ "_id" : 1, "subject" : "History", "score" : 88 }
{ "_id" : 2, "subject" : "History", "score" : 92 }
{ "_id" : 3, "subject" : "History", "score" : 97 }
{ "_id" : 4, "subject" : "History", "score" : 71 }
{ "_id" : 5, "subject" : "History", "score" : 79 }
{ "_id" : 6, "subject" : "History", "score" : 83 }
ASSALE Adjé Louis Big Data NoSQL MongoDB 93
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type pipeline
✓ autres opérateurs :
◼ $count : s’utilise le plus souvent avec un $match qui définit un
critère, et $count s’applique sur les éléments fournis par $match
◼ Exemple : [Link]([{$match: {score: {$gt:
80}}}, {$count: "passing_scores"}])
◼ Résultat :
◼ { "passing_scores" : 4 }
◼ $dayOfWeek, $dayOfMonth, $dayOfYear : s’utilise pour extraire
le jour dans un champ de type Date
◼ Syntaxe : {$dayOfWeek:<expression>} <expression> champ
de type Date
◼ $month, $week, $year : extrait mois, semaine ou année
ASSALE Adjé Louis Big Data NoSQL MongoDB 94
Base de données NoSQL - MongoDB
◼Agrégation dans MongoDB
• Agrégation de type mapReduce
✓ principe :
◼ elle est dépréciée, elle est remplacée par l’agrégation de type
pipeline
✓ Syntaxe :
ASSALE Adjé Louis Big Data NoSQL MongoDB 95
Base de données NoSQL - MongoDB
◼Sauvegarde et restauration
• Importation de documents
✓ L’on peut insérer des documents à partir d’un fichier json /csv
◼ mongoimport --db labase --collection "collection" --drop --type json
--host "leserveur:port" --file "chemin_du_fichier"
◼ --db : nom de la base de données où importer les données
◼ --collection : nom de la collection où les données seront stockées
◼ --drop : supprime d’abord la collection avant d’importer
◼ --type : précise le type de document. JSON par défaut
◼ --host : hôte et port mongodb recevant les données
◼ --file : chemin où se trouve le fichier json
◼ Pour utiliser mongoimport il faut télécharger mongo tools command
lines et les configurer si cela n’est pas déjà installé lors de l’installation
ASSALE Adjé Louis Big Data NoSQL MongoDB 96
Base de données NoSQL - MongoDB
◼Sauvegarde et restauration
• Importation de documents
✓ Exemple :
◼ Soit à importer, les données au format json du fichier [Link] situé
dans le dossier « D:\Donnees_TP », dans la collection films de la base
de données mabase. Lancer à partir du DOS, la commande suivante:
◼ C:\...>mongoimport --db mabase --collection "films" --drop --type json
--file "D:/donnees_tp/[Link]"
◼ Les données seront enregistrées dans la collection désignée. Ici, le
serveur par défaut « localhost:27017 » a été utilisé, d’où l’omission de
l’option « --host "serveur:port" »
ASSALE Adjé Louis Big Data NoSQL MongoDB 97
Base de données NoSQL - MongoDB
◼Sauvegarde et restauration
• Exportation de documents
✓ Pour exporter des documents dans un fichier json /csv
◼ mongoexport –db=labase –collection=collect --host "leserveur:port"
--out "fichier_de_sortie" ou
◼ Mongoexport --uri="mongodb://serveur:port/base" --collection=collect
--out="fichier_de_sortie"
◼ --db : nom de la base de données où importer les données
◼ --collection : nom de la collection où les données seront stockées
◼ --type : précise le type de document. JSON par défaut
◼ --host : hôte et port mongodb contenant les données
◼ --out : le fichier qui recevra les documents
◼ --uri : l’adresse de la base de données contenant les données
ASSALE Adjé Louis Big Data & NoSQL MongoDB 98
Base de données NoSQL - MongoDB
◼Sauvegarde et restauration
• Exportation de documents
✓ Exemple :
◼ Soit à exporter les documents de la collection restaurants de la base de
données mabase vers le fichier lesRestaurants du dossier d:\donnees_tp
◼ mongoexport –db=mabase –collection=restaurants --out
"d:/données_tp/[Link]"
ASSALE Adjé Louis Big Data & NoSQL MongoDB 99
Base de données NoSQL - MongoDB
◼Sauvegarde et restauration
• Sauvegarde de bases de données
✓ L’on peut sauvegarder toutes les collections d’une base de
données
◼ mongodump –db=labase --host "leserveur:port" --out
"fichier_de_sortie" --gzip --username user --password pass
◼ --db : nom de la base de données à sauvegarder
◼ --host : hôte et port mongodb contenant les collections
◼ --out : le fichier qui recevra la sauvgarde
◼ --gzip : la sauvegarde sera compressée
◼ --username : le nom utilisateur
◼ --password : son mot de passe
ASSALE Adjé Louis Big Data & NoSQL MongoDB 100
Base de données NoSQL - MongoDB
◼Sauvegarde et restauration
• Sauvegarde de bases de données
✓ Exemple :
◼ Soit à sauvegarder la base de données « mabase »
ASSALE Adjé Louis Big Data & NoSQL MongoDB 101
Base de données NoSQL - MongoDB
◼Sauvegarde et restauration
• Restauration de bases de données
✓ L’on peut restaurer une base de données sauvegardée
◼ mongorestore --host "leserveur:port" "fichier_de_sortie" --gzip --
username user --password pass --drop
◼ --host : hôte et port mongodb contenant les collections
◼ --drop : efface la base avant restauration
◼ --gzip : la sauvegarde sera compressée
◼ --username : le nom utilisateur
◼ --password : son mot de passe
ASSALE Adjé Louis Big Data & NoSQL MongoDB 102
Base de données NoSQL - MongoDB
◼Sauvegarde et restauration
• Restauration de bases de données
✓ Exemple : restauration de la base de données mabase
ASSALE Adjé Louis Big Data & NoSQL MongoDB 103
Base de données NoSQL - MongoDB
◼Travaux Pratiques Nº3
• Voir fiche de TP
ASSALE Adjé Louis Big Data NoSQL MongoDB 104
Base de données NoSQL - MongoDB
◼Authentification et Autorisation
• Définitions
✓ L’authentification est le processus de vérification de
l’identité d’un utilisateur
✓ L’autorisation détermine l’accès de l’utilisateur aux
ressources (Base de données, collections, serveur) et aux
opérations (lecture, écriture, suppression, …).
• Gestion des utilisateurs
✓ par défaut, Mongo est accessible sans authentification et
permet toutes les actions sur la base
✓ L’on peut changer cette configuration par défaut, en faisant des
réglages sur le fichier [Link]
ASSALE Adjé Louis Big Data & NoSQL MongoDB 105
Base de données NoSQL - MongoDB
◼Authentification et Autorisation
• Gestion des utilisateurs
✓ ouvrir le fichier /etc/[Link] ou /bin/[Link]
Dans zone #network interface
- remplacer dans bindIp [Link] par
[Link] pour autoriser tous les ip
- Possibilté de changer le port
✓ Pour activer l’autorisation
Dans zone #security:
- Enlever le # devant security
- Ajouter : authorization: "enabled"
✓ N.B. : prise en compte après redémarrage et seulement lors de
l’accès aux collections par : >[Link]("utilisateur","pass")
ASSALE Adjé Louis Big Data & NoSQL MongoDB 106
Base de données NoSQL - MongoDB
◼Authentification et Autorisation
• Gestion des utilisateurs
✓ création d’utilisateurs
◼ Pour authentifier un client, il faut lui ajouter un/des utilisateurs
◼ Un utilisateur se crée sur une base de donnée (sa base de données
d’authentification) – on peut lui attribuer des rôles sur des bases
Successfully added user: {
◼ Expl : use mabase "user" : "assale",
[Link]( "roles" : [
{ user: "assale", {
pwd: "12345678", "role" : "read",
"db" : "test"
roles: [
},
{ role: "read", db: "test" }, {
{ role: "readWrite", db: "mabase" } "role" : "readWrite",
] "db" : "mabase"
} }
) ] 107
Base de données NoSQL - MongoDB
◼Authentification et Autorisation
• Gestion des utilisateurs
✓ se connecter en tant qu’utilisateur donné
◼ Mongo --host [Link] --port pppp –u "assale" –p "12345678" --
authenticationDatabase "mabase"
✓ Autorisation – Contrôle d’Accès
◼ Pour activer le contrôle d’accès, suivre les étapes suivantes :
◼ Lancer une instance MongoDB sans authentification
◼ Ajouter un utilisateur de type administrateur
◼ Activer le contrôle d’accès
◼ Ajouter d’autres utilisateurs
ASSALE Adjé Louis Big Data & NoSQL MongoDB 108
Base de données NoSQL - MongoDB
◼Authentification et Autorisation
• Gestion des utilisateurs
✓ Autorisation – Contrôle d’Accès
◼ Ajout d’un utilisateur « Admin » :
◼ Dans la base de données « admin », ajouter un utilisateur avec le
rôle userAdminAnyDatabase
use admin
[Link](
{ user: "AdminDba",
pwd: "toto",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
ASSALE Adjé Louis Big Data & NoSQL MongoDB 109
Base de données NoSQL - MongoDB
◼Authentification et Autorisation
• Gestion des utilisateurs
✓ Autres commandes pour gérer les utilisateurs
◼ Vérifier les utilisateurs d’une base et leur rôles :
◼ [Link]() ou show users
◼ [Link]({usersInfo: { forAllDBs: true}}) lister tous les
utilisateurs depuis n’importe quelle base
◼ Changer mot de passe – supprimer un utilisateur
◼ [Link](username, newPass)
◼ [Link](username)
◼ Nécessite privilèges administrateur
ASSALE Adjé Louis Big Data & NoSQL MongoDB 110
Base de données NoSQL - MongoDB
◼Authentification et Autorisation
• Gestion des utilisateurs
✓ Gestion des droits et rôles des utilisateurs
◼ Ajouter/révoquer des droits :
◼ [Link]() / [Link]()
◼ >[Link](
"assale", [{ role: "readWrite", db:"logs"} ])
{ ok: 1 }
◼ >[Link](
"assale", [{ role: "readWrite", db:"logs"} ])
{ ok: 1 }
ASSALE Adjé Louis Big Data & NoSQL MongoDB 111
Base de données NoSQL - MongoDB
◼Authentification et Autorisation
• Gestion des utilisateurs
✓ Gestion des droits et rôles des utilisateurs
◼ Créer un rôle avec des privilèges ressources et actions
[Link](
{ role: "roleDev",
privileges: [ {resource: {db: "sales", collection: "orders"},
actions: [ "find", "update", "insert", "remove" ] },
{resource: {db: "sales", collection: "inventory"},
actions: [ "find" ] }
],
roles: [{ role: "readWrite", db: "sales"}]
}
◼ Le rôle roleDev est créé avec toute action sur la collection « orders » de
la base « sales » et recherche uniquement sur la collection « inventory »
ASSALE Adjé Louis Big Data & NoSQL MongoDB 112
Base de données NoSQL - MongoDB
◼Travaux Pratiques Nº4
• Voir fiche de TP
ASSALE Adjé Louis Big Data NoSQL MongoDB 113
Base de données NoSQL - MongoDB
◼MongoDB et Python
• Outils
✓ MongoDB
◼ Télécharger et installer
✓ Python
◼ Télécharger via le lien : [Link]
◼ Installer le – inclure pip lors de l’installation
✓ Télécharger et installer « pymongo »
◼ Pour télécharger et installer « pymongo » taper la commande
◼ C:\....>pip install pymongo==3.11.2 (3.11.2 numéro de version)
ASSALE Adjé Louis Big Data & NoSQL MongoDB 114
Base de données NoSQL - MongoDB
◼MongoDB et Python
• Accès à MongoDB à partir de python
✓ Connection à MongoDB
◼ Importation de la librairie
◼ from pymongo import MongoClient
◼ Syntaxe connexion par défaut à localhost :
◼ client = MongoClient()
◼ Connexion en spécifiant un hôte et un port :
◼ client = MongoClient(host="localhost", port=27017)
◼ client = MongoClient(host=hote, port=num, username=utilisateur,
password=mot_pass) ou
◼ uri = "mongodb://loalhost:27017"
client = MongoClient(uri) //via une uri
ASSALE Adjé Louis Big Data & NoSQL MongoDB 115
Base de données NoSQL - MongoDB
◼MongoDB et Python
• Accès à MongoDB à partir de python
✓ Accès à une base de données et collections
◼ Choix de la base
◼ db = client.nom_base ou
◼ db = client['nom_base']
◼ Choix de la collection :
◼ maCol = db.nom_collection ou
◼ maCol = db['nom_collection']
✓ Insertion de documents
◼ Définir un enregistrement de document
◼ record1 = { "title" :"MongoDB and Python",
"description" : "MongoDb is no SQL Database",
tags :["mongodb", "database", "NoSQL"], "viewers":200 }116
Base de données NoSQL - MongoDB
◼MongoDB et Python
• Accès à MongoDB à partir de python
✓ Insertion de documents
◼ 2 méthodes pour insérer : insert_one() – insert_many()
◼ rec = maCol.insert_one(record1) ou
◼ recs = maCol.insert_one([record2, record3])
✓ Fonctions de requetage
◼ Fonction : find()
◼ resultSet=[Link]({"title":"Mongo and Python"})
◼ Fonction : count()
◼ i=[Link]()
◼ N.B. : il est obligatoire de mettre les quotes (") sur les clés et les valeurs
dans le langage Python
ASSALE Adjé Louis Big Data & NoSQL MongoDB 117
Base de données NoSQL - MongoDB
◼MongoDB et Python
• Accès à MongoDB à partir de python
✓ Modification de documents
◼ Méthode pour modifier : update_one(critère, maj_données)
◼ maCol.update_one({"title":"MongoDB and Python"},
{$set :{"viewers":175}})
✓ Suppression de documents
◼ Fonction : delete_one(critère)
◼ maCol.delete_one({"title":"MongoDB and Python"})
◼ N.B. : il est obligatoire de mettre les quotes (") sur les clés et les valeurs
chaines de caractères dans le langage Python
ASSALE Adjé Louis Big Data & NoSQL MongoDB 118
Base de données NoSQL - MongoDB
◼MongoDB et Python
• Code final
from pymongo import MongoClient
client= MongoClient(host="localhost", port=27017)
db=[Link]
record1 = {
"title" :"MongoDB and Python",
"description" : "MongoDb is no SQL Database",
"tags" :["mongodb", "database", "NoSQL"],
"viewers":200
}
maCol = [Link]
rec = maCol.insert_one(record1)
ASSALE Adjé Louis Big Data & NoSQL MongoDB 119
Base de données NoSQL - MongoDB
◼MongoDB et Python
• Code final
record2 = {
"title" :"MongoDB and Java",
"description" : "accessing MongoDb in Java",
"tags" :["mongodb", "database", "Java"],
"viewers":209
}
record3 = {
"title" :"Introducting to NoSQL Database",
"description" : "summary on NoSQL Database",
"tags" :["mongodb", "database", "Cassandra"],
"viewers":102
}
recs = maCol.insert_many([record2, record3])
resultSet=[Link]()
ASSALE Adjé Louis Big Data & NoSQL MongoDB 120
Base de données NoSQL - MongoDB
◼MongoDB et Python
• Code final
for i in resultSet:
print(i)
n=[Link]()
maCol.update_one({"title":"MongoDB and Python"},
{"$set" :{"viewers":175} })
resultSet=[Link]()
for i in resultSet:
print(i)
n=[Link]()
maCol.delete_one({"title":"MongoDB and Python"})
resultSet=[Link]()
for i in resultSet:
print(i)
n=[Link]()
Big Data & NoSQL MongoDB 121
print(n)
Base de données NoSQL - MongoDB
◼Travaux Pratiques Nº5
• Voir fiche de TP
ASSALE Adjé Louis Big Data NoSQL MongoDB 122
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Outils
✓ MongoDB
◼ Télécharger et installer
✓ Java
◼ Télécharger via le lien : [Link]
◼ Installer le – configurer les chemins d’accès du /Jdk dans JAVA_HOME
et du /bin dans PATH
✓ Télécharger et installer un IDE tel que « Eclipse »
✓ Télécharger le jar « mongodb-driver »
◼ Ici : [Link]
driver-sync/3.8.1/
◼ Si nécessaire les jars « bson » et « mongodb-driver-core »
ASSALE Adjé Louis Big Data & NoSQL MongoDB 123
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Faire menu : File/New/Maven project
cliquer sur « Next »
ASSALE Adjé Louis Big Data & NoSQL MongoDB 124
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
Remplir :
- Group id : [Link]
- Artifact id mongodb-driver-
sync
- Version : 3.8.1
Puis cliquer sur « Finish »
ASSALE Adjé Louis Big Data & NoSQL MongoDB 125
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Importer les fichiers jar du driver de mongodb
◼ Cliquer-droit sur le projet puis Build Path/Configure Build Path
◼ Cliquer sur « Add External Jars.. »
ASSALE Adjé Louis Big Data & NoSQL MongoDB 126
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Importer les fichiers jar du driver de mongodb
◼ Sélectionner les fichiers jars puis cliquer sur « Ouvrir »
ASSALE Adjé Louis Big Data & NoSQL MongoDB 127
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Importer les fichiers jar du driver de mongodb
◼ Les fichiers sélectionnés apparaissent puis « Apply and Close »
ASSALE Adjé Louis Big Data & NoSQL MongoDB 128
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Ajouter un fichier Java pour l’application
◼ Cliquer-droit sur le projet puis New/Class
◼ Ajouter les imports suivants dans le fichier
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
ASSALE Adjé Louis Big Data & NoSQL MongoDB 129
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Connexion à la base mongoDB
◼ Créer la méthode void main() et ajouter les instructions de
connexion à la base
public static void main(String[] args) {
String uri = "mongodb://localhost:27017";
// Create a MongoDB Client
MongoClient mongoClient = [Link](uri);
ASSALE Adjé Louis Big Data & NoSQL MongoDB 130
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Connexion à la base mongoDB
◼ Créer la méthode void main() et ajouter les instructions de
connexion à la base
public static void main(String[] args) {
String uri = "mongodb://localhost:27017";
// Create a MongoDB Client
MongoClient mongoClient = [Link](uri);
}
ASSALE Adjé Louis Big Data & NoSQL MongoDB 131
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ création de base de données et collection
◼ ajouter les instructions suivantes pour créer une base de données et
une collection
// Create a MongoDB database
MongoDatabase database = [Link]("usersDB");
// Create a MongoDB Collection
MongoCollection<Document> collection = [Link]("users");
[Link]("Collection Created Successfully!");
ASSALE Adjé Louis Big Data & NoSQL MongoDB 132
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Insérer un document : insertOne()
◼ ajouter les instructions suivantes pour insérer un document
Document doc = new Document("title", "MongoDB and Java").
append("description", "database, NoSQl, Java").
append("likes", 162).
append("url", "[Link]
append("by", "[Link]");
[Link](doc);
[Link]("Success! Inserted document: ");
ASSALE Adjé Louis Big Data & NoSQL MongoDB 133
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Insérer des documents : insertMany()
◼ Ajouter l’import : [Link].*;
◼ ajouter les instructions suivantes pour insérer des documents
List<Document> userList = [Link](
new Document().append("username", "owen hart"),
new Document().append("username", "jack grealish"),
new Document().append("username", "vitali@30"));
try {
[Link](userList);
[Link]("Inserted document ");
} catch (MongoException me) {
[Link]("Unable to insert due to an error: " + me);
}
ASSALE Adjé Louis Big Data & NoSQL MongoDB 134
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Requetage : find()
◼ Ajouter l’import suivant : import [Link];
◼ ajouter les instructions suivantes pour itérer sur la collection
FindIterable<Document> iterDoc = [Link]();
MongoCursor<Document> it = [Link]();
while ([Link]()) {
[Link]([Link]());
}
ASSALE Adjé Louis Big Data & NoSQL MongoDB 135
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Requetage : updateOne()
◼ Ajouter les imports suivants :
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
◼ ajouter les instructions suivantes pour modifier un document
Document query = new Document().append("username", "vitali@30");
Bson updates = [Link](
[Link]("phonenumber", 010154257),
[Link]("address", "666, 5th Avenue, NYC"));
136
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Requetage : updateOne()
UpdateOptions options = new UpdateOptions().upsert(true);
try {
UpdateResult result = [Link](query, updates, options);
[Link]("Modified document count: " +
[Link]());
[Link]("Upserted id: " + [Link]()); // only
contains a value when an upsert is performed
} catch (MongoException me) {
[Link]("Unable to update due to an error: " + me);
}
ASSALE Adjé Louis Big Data & NoSQL MongoDB 137
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Créer un projet maven à partir de l’IDE (Eclipse)
◼ Requetage : deleteOne()
◼ Ajouter les imports suivants :
import static [Link];
import [Link];
◼ ajouter les instructions suivantes pour supprimer un document
Bson del_query = eq("username", "vitali@30");
try {
DeleteResult result = [Link](del_query);
[Link]("Deleted document count: " +
[Link]());
} catch (MongoException me) {
[Link]("Unable to delete due to an error: " + me);
}
ASSALE Adjé Louis Big Data & NoSQL MongoDB 138
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
✓ Le programme complet est :
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
//import [Link];
import [Link];
import [Link];
139
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
import [Link];
import static [Link];
import [Link];
public class App {
public static void main(String[] args) {
String uri = "mongodb://localhost:27017";
// Create a MongoDB Client
MongoClient mongoClient = [Link](uri);
// Create a MongoDB database
MongoDatabase database = [Link]("usersDB");
// Create a MongoDB Collection
MongoCollection<Document> collection = [Link]("users");
[Link]("Collection Created Successfully!");
ASSALE Adjé Louis Big Data & NoSQL MongoDB 140
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
Document doc = new Document("title", "MongoDB and Java").
append("description", "database, NoSQl, Java").
append("likes", 162).
append("url", "[Link]
append("by", "[Link]");
[Link](doc);
[Link]("Success! Inserted document: ");
//insert many
List<Document> userList = [Link](
new Document().append("username", "owen hart"),
new Document().append("username", "jack grealish"),
new Document().append("username", "vitali@30"));
try {
[Link](userList);
[Link]("Inserted documents ");
ASSALE Adjé Louis Big Data & NoSQL MongoDB 141
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
} catch (MongoException me) {
[Link]("Unable to insert due to an error: " + me);
}
//iterating documents
FindIterable<Document> iterDoc = [Link]();
MongoCursor<Document> it = [Link]();
while ([Link]()) {
[Link]([Link]());
}
//update document
Document query = new Document().append("username", "vitali@30");
Bson updates = [Link](
[Link]("phonenumber", 010154257),
[Link]("address", "666, 5th Avenue, NYC"));
UpdateOptions options = new UpdateOptions().upsert(true);
ASSALE Adjé Louis Big Data & NoSQL MongoDB 142
Base de données NoSQL - MongoDB
◼MongoDB et Java
• Accès à MongoDB à partir de Java
try {
UpdateResult result = [Link](query, updates, options);
[Link]("Modified document count: " + [Link]());
[Link]("Upserted id: " + [Link]()); // only contains
a value when an upsert is performed
} catch (MongoException me) {
[Link]("Unable to update due to an error: " + me);
}
//deleting document
Bson del_query = eq("username", "vitali@30");
try {
DeleteResult result = [Link](del_query);
[Link]("Deleted document count: " + [Link]());
} catch (MongoException me) {
[Link]("Unable to delete due to an error: " + me); }
} ASSALE Adjé Louis Big Data & NoSQL MongoDB 143
Base de données NoSQL - MongoDB
◼Travaux Pratiques Nº6
• Voir fiche de TP
ASSALE Adjé Louis Big Data NoSQL MongoDB 144