Vous êtes sur la page 1sur 6

Schéma de validation :

db.createCollection("exampleCollection", {

validator: {

$jsonSchema: {

bsonType: "object",

required: ["name", "age", "gender"],

properties: {

name: {

bsonType: "string",

description: "must be a string and is required"

},

age: {

bsonType: "int",

minimum: 18,

maximum: 65,

description: "must be an integer in [18, 65] and is required"

},

gender: {

enum: ["Male", "Female", "Other"],

description: "can only be one of the enum values"

},

email: {

bsonType: "string",

pattern: "^.+@.+\..+$",

description: "must be a valid email address"

},

address: {

bsonType: "object",

required: ["street", "city"],

properties: {

street: {

bsonType: "string",

description: "street name as a string"

},
city: {

bsonType: "string",

description: "city name as a string"

})

Insertion

db.exampleCollection.insertOne({

name: "John Doe",

age: 30,

gender: "Male",

email: "johndoe@example.com",

address: {

street: "123 Main St",

city: "Anytown"

})
Mapreducer :

Combien d’inspections ont été faites dans le quartier Bronx :

G_restaurants> db.resto.aggregate([{$match: {borough: "Bronx"}},{$unwind : "$grades"},{$group: {_id: null,"Le


nombre :":{$sum:1}}}])

Combien d’inspections ont été faites dans l’ensemble des restaurants du quartier Bronx :

G_restaurants> db.resto.aggregate([{$match: {borough: "Bronx"}},{$unwind : "$grades"},{$group: {_id: "$name","Le


nombre par resto :":{$sum:1}}}])

Les index :

Créer la base de données tpIndex : voir classroom

The command to create the database tp_index by batch:

let vardoc = [];

for (let i = 1; i <= 7000000; i++) {

vardoc.push({nom: "nom " + i,prenom: "prenom_" + i,age: i,compteur: i});

if (i % 1000 === 0) {

db.personnes.insertMany(vardoc);

vardoc = [];

Db.personnes.getIndexes()

Db.personnes.explain().find()

Créer un index :

Db.personnes.createIndex({age : 1}) / Go search for the difference between values 1 and -1 for this option

 Tableau contigu (accès instantané à l’élément du tableau) /non contigu

Accès instantané : accès direct via adresse de la colonne

It’s related to indexation, you can search

Properties :{

Operateur :

Enum : {‘’iam’’,’’orange’’},
}

17/12/2023

L’importation et exportation et la sauvegarde et restauration de base de données.

On importe une seule collection

Mongoimport --db nom_base --collection nom_collection --drop <optionnelle> --type <optionnelle> --host
<optionnelle> --file C:\dossier\fichier.json

--fields : to specify fields for the document

Mongoexport --db nom_base --collection nom_collection --out=expoZIP.json

Exemple :

mongoexport -d TP1 -c posts --fields "title","body" --type CSV --out=C:\Users\USER\posts.csv

Modes d’exportation de données:

- Mode relaxe
- Mode canonique : avec les types

Mongoexport --db nom_base --collection nom_collection --jsonFormat=canonical --out=expoZIP.json

Sauvegarde :

mongodump -h localhost --db G_restaurants --out=C:\Users\USER\sauvegarde

Restauration:

mongorestore --db G_restaurants C:\Users\USER\sauvegarde\G_restaurants

Le principe de réplication:

Définition:
que se passera-t-il lorsque le serveur autonome se bloque ?
la réplication est un moyen de conserver des copies de serveur identiques recommandé pour tous les déploiements
de production.
La réplication est le processus de synchronisation des données sous format de copies identiques sur plusieurs
serveurs, afin d'assure la redondance et augmente la disponibilité des données. La réplication protège une base de
données contre la perte causée par l'utilisation d'un seul serveur.
Elle permet également de récupérer après une panne matérielle et ou des interruptions de service. Les copies
distantes supplémentaires des données, permettent de récupérer le service après le sinistre.
La réplication est le processus de synchronisation d'un ensemble de données sur de multiples serveurs.
La réplication fournit la haute disponibilité : si un serveur MongoDB crash, un autre prendra la relève.

Architecture de réplication
Pourquoi la réplication?
› Pour protéger vos données
Disponibilité élevée (24 h* 7j) des données
Reprise après sinistre
Pas de temps d'arrêt pour la maintenance (comme les sauvegardes, les reconstructions d'index, le compactage)
• Mise à l'échelle de lecture (copies supplémentaires à lire)
A cet effet, la réplication est fortement recommandée pour toutes les bases de données en production dès le
premier jour
La réplication sous MongoDB est une architecture composée d'un serveur principal et de nombreux serveurs
secondaires. Elle est asynchrone, le serveur principal gère lui seul les demandes des clients.
Une réplication asynchrone est une réplication dans laquelle un serveur maître écrit la transaction dans ses logs
binaires sans savoir quand ils seront pris en compte par les serveurs esclaves.
L'avantage de cette architecture est qu'elle ne ralentit pas les écritures sur le serveur maître. En revanche, rien ne
garantit que les données soient à jour sur tous les serveurs du dispositif. Tout délai ou rupture de la réplication sur
un serveur introduit une incohérence au niveau des données.

Le Replica Set
Un ensemble de répliques, ou plus communément appelé "Replica Set", correspond à un ensemble de processus
mongod qui hébergent le même ensemble de données. Le premier mongod, le mongod primaire, reçoit toutes les
opérations de lecture et écriture. Les autres instances mongod, les répliques secondaires, appliquent les instructions
reçues par le membre primaire afin d'avoir exactement le même ensemble de données. Un replica set ne peut avoir
qu'un seul membre primaire uniquement qui accepte les opérations d'écriture.
Afin de supporter la réplication, le membre primaire enregistre tous les changements réalisés sur son ensemble de
données dans son oplog (globalement on peut le qualifier de journal enregistrant toutes les opérations d'écritures
du membre).
De cette façon, les membres secondaires vont pouvoir s'appuyer sur cet oplog afin de répliquer les mêmes
opérations sur leur propre ensemble de données.

24/12/2023

Jointure : $lookup

db.eleves.aggregate([{$lookup: {"from": "devoirs","localField": "code","foreignField": "code","as": "detail_notes"}}])

db.eleves.aggregate([{$lookup:{"from":"devoirs","localField":"code","foreignField":"code","as":"detail_notes"}},
{$unwind: "$detail_notes"},{$group:{_id: "$nom",moyenne: {$avg: "$detail_notes.note"}}}])

db.eleves.aggregate([{$lookup:{"from":"devoirs","localField":"code","foreignField":"code","as":"detail_notes"}},
{$unwind: "$detail_notes"},{$group:{_id: "$nom",moyenne: {$sum: 1}}}])

Sécurité :

Deux modes de fonctionnement :

Sans authentification

Avec authentification

db.createUser({user: "Admin",

pwd: passwordPrompt () ,

roles:[{ role: "userAdminAnyDatabase", db: "admin"},


"readWriteAnyDatabase"]})

31/12/2023

Exam :

db.resto.aggregate([{$lookup : {from :"zip", localField:"address.zipcode" , foreignField:"_id", as :"zip_resto"}},


{$project: {name :1, "zip_resto.city":1,"zip_resto.pop":1, "_id":0}}])

db.zip.aggregate([{$lookup:{from: "resto",localField: "_id",foreignField: "address.zipcode",as:"restos"}},{$project:


{_id: 1,"restos.name":1}},{$unwind:"$restos.name"},{$group: {_id:"$_id","Somme:":{$sum: 1}}}])

Vous aimerez peut-être aussi