- Introduction à MongoDB
- JSON
 - NoSQL
 
 - Opérations usuelles
 
BD NoSQL distribué de type Document Store (site web)
Objectifs :
Principe de base : les données sont des documents
collectionsJSONJavaScript Object Notation(JSON suite)
{}{ "nom": "jollois", "prenom": "fx" }[][ 1, 5, 10]string et number) et trois constantes (true, false, null)Validation possible du JSON sur jsonlint.com/
{
    "tubd": {
        "formation": "DU Analyste Big Data",
        "responsable": { "nom": "Poggi", "prenom": "JM" },
        "etudiants" : [
            { "id": 1, "nom": "jollois", "prenom": "fx" },
            { "id": 2, "nom": "aristote", "details": "délégué" },
            { "id": 5, "nom": "platon" }
        ],
        "ouverte": true
    },
    "tudv": {
        "formation": "DU Data Visualisation",
        "ouverte": false,
        "todo": [
            "Creation de la maquette",
            "Validation par le conseil"
            ],
        "responsable": { "nom": "Métivier" }
    }
}
BSON : extension de JSON
Schéma dynamique
ALTER TABLE ou de redesign de la basePas de jointures entre les collections
Commandes suivantes réalisables à partir du shell
Existence d’une librairie R : rmongodb
La commande db.collection.find(), dans laquelle collection désigne la collection sur laquelle on travaille, permet de retourner tous les documents.
La commande db.collection.findOne() retourne un élément (le premier a priori).
Pour faire une restriction, on doit passer un critère (ou un ensemble de critère) en paramètre :
db.collection.find({ attribut: valeur });
Les critères sont au format JSON
Toujours avec la commande db.collection.find(), il est possible de ne choisir que certains éléments à afficher. Pour cela, on doit passer en deuxième paramètre un littéral JSON avec pour chaque élément
attribut: 1, il sera présent (inclusion)attribut: 0, il sera absent (exclusion)_id toujours présent, sauf si explicitement exclu (avec _id: 0)Si on veut une projection sans restriction :
db.collection.find({ }, { attribut1: 1, attribut2: 1 });
Pour compter le nombre de documents :
db.collection.find().count();
Pour n’avoir que les \(n\) premiers documents :
db.collection.find().limit(10);
Pour trier les documents, fonction sort(), qui prend en paramètre un littéral décrivant quels attributs on utilise et comment :
attribut: 1 : tri croissantattribut: -1 : tri décroissantdb.collection.find().sort({ attribut: 1 });
Il existe la fonction db.collection.aggregate( tableau ) qui permet le calcul d’agrégat. Le tableau peut contenir les éléments suivants (dans des littéraux) :
$project : redéfinition des documents (si nécessaire)$match : restriction sur les documents à utiliser$group : regroupements et calculs à effectuer$sort : tri sur les agrégatsdb.collection.aggregate([
    { $group: { 
        _id: "$attributQl", 
        total: { $sum: "$attributQt" } 
    } }
])
Il n’existe pas de processus de jointures dans MongoDB (ce n’est pas l’idée).
Pour cela, on doit utiliser des curseurs (ou cursor) en stockant le résulat d’un find() dans une variable, on créé un cursor. Celui-ci a des fonctions permettant de naviguer dans ce résultat (pour faire les jointures)
cursor.hasNext() : pour savoir s’il reste des documents dedanscursor.next() : document suivant dans le curseurcursor.objsLeftInBatch() : pour savoir combien de document il reste dans le curseurLe paradigme Map-Reduce permet de décomposer une tâche en deux étapes :
Exemple classique : décompte des mots présents dans un ensemble de texte
<mot, 1> (un document = beaucoup de résultats générés)On utilise la fonction db.collection.mapReduce() pour appliquer l’algo Map-Reduce sur les documents de la collection, avec les paramètres suivants :
map : fonction JavaScript
emit(key, value) pour créer un couple résultatreduce : fonction JavaScript
key et values (tableau des valeurs créés à l’étape précédente)return result pour renvoyer le résultatout : collection dans laquelle stocker les résultats