Exercices Corrigés MongoDB:

Soit la structure du document stagiaires suivantes:
Stagiaires:{
	_id:1,
	nom:'abc',
	groupe:{
		_id:1,
		nom:"g1",
		filiere:{
			_id:1,nom:"filiere1",
			modules:[
			      {
				   _id:1, nom:"module1",
				   examens:[
				   {type:"type1",note:15},
				   
				]
			}]
			
		}
	}
	}

Questions & Réponses

  • 1Afficher le nombre de stagiaire du groupe _id=1
    db.stagaires.find({"groupe._id":1},{}).count()
  • 2 Afficher la listes des modules sans doublant du groupe _id=1
    db.stagiaires.distinct("groupe.filiere.modules.nom",{"groupe._id":1})
    Remarque:
    la fonction distinct("attribut",{condition})
    Permet d'afficher les resultats sans doublans suivant l'attribut fourni
  • 3Afficher la liste des stagiaires qui ont la note >10 dans le module nom=base de données
    db.stagiaires.find({"groupe.filiere.modules":
               {$elemMatch:{ 
    			   "examens.note":{$gt:10},
    			   "nom":"base de données"
    			   }}
    })
    
  • 4Afficher la liste des stagiaires qui ont la note >10 dans le module nom=base de données dans un EFM
    db.stagaires.find({"groupe.filiere.modules":
               {$elemMatch:{ 
    			   "examens":{"note":{$gt:10},"type":"EFM"},
    			   "nom":"base de données"
    			   }}
    })
    

    Remarque

    suppons que le tableau examens contient des objets contenant plus que note et type , un attribut exemple attribut1
    la solution en haut est fausse car on doit ajouter dans la condition toutes les attributs de l'objet afin de faire
    dans ce cas la solution doit être :
    db.stagaires.find({"groupe.filiere.modules":
               {$elemMatch:{ 
    			   "examens": {$elemMatch:{"note:{$gt:10},"type":"EFM"}},
    			   "nom":"base de données"
    			   }}
    })
    
  • 5Afficher la liste des filières qui ont aucun module
    db.stagaires.find({"groupe.filiere.modules":{$exists:false}},{"groupe.filiere.nom":1}))
  • 6Ajouter un stagiaire dans le groupe _id=1
    on va ajouter un document avec id groupe=1
  • 7Ajouter un module dans la filiere _id=1
    db.stagaires.updateMany({"groupe.filiere._id":1},
    {$push:{"groupe.filiere.modules":
                   {
    			   "_id":2,
    			   "nom":"module2",
    			   "examen":[]
    			  }
    			  })
  • 8 Ajouter un examen pour le stagiaire id_1 dans le module _id=2
    db.stagiaires.updateOne(
    {_id:1},
    {$push:{"groupe.filiere.modules.$[element].examens":
                    {type:"cc",note:10}}},
    {arrayFilters:[{"element._id":2}]})
    Solution 2:
    db.stagiaires.updateOne(
    {$and:[{_id:1},{"groupe.filiere.modules._id":2}]},
    {$push:{"groupe.filiere.modules.$.examens":{type:"cc",note:10}}}
    		)
  • 9 Supprimer l'attribut examens du stagiaire id=1 dans le module nom=base de données
    db.stagiaires.updateMany({_id:1},
    {$unset:{"groupe.filiere.modules.$[element].examens":""}},
    {arrayFilters:[{"element.nom":"base de données"}]})
  • 10 Supprimer tous les examens du stagiaire id=1 dans le module nom=base de données
    db.stagiaires.updateMany({_id:1},
    {$set:{"groupe.filiere.modules.$[element].examens":[]}},
    {arrayFilters:[{"element.nom":"base de données"}]})
  • 11 Ajouter l'attribut valider=true dans chaque modue si la note du EFM>10
    db.stagiaires.updateMany({},
    {$set:{"groupe.filiere.modules.$[element].valider":true}},
    {arrayFilters:[{"element.examens.type":'EFM',"element.examens.note":{$gt:10}}]})
    solution 2
    db.stagiaires.updateMany({},
    {$set:{"groupe.filiere.modules.$[element].valider":true}},
    {arrayFilters:[{"element.examens":{$elemMatch:{"type":'EFM',"note":{$gt:10}}}}]})
  • 12 Supprimer les documents du groupe id=1
    db.stagiaires.deleteMany({"groupe._id":1})
  • 13 Supprimer les documents des stagiaires qui un 0 dans un EFM
    db.stagaires.deleteMany(
    {"groupe.filiere.modules.examens":
    {$elemMatch:{"type":"EFM",note:0}}})
  • 14 Afficher toutes les modules du goupe nom="WFS"
    db.stagiaires.find({"groupe.nom":"WFS"},
    {"groupe.filiere.modules":1})
  • 15 Afficher le nom du stagaires qui la première note du EFM (max des notes) dans le module nom=base de données
    db.stagiaires.find({"groupe.filiere.modules":
    {$elemMatch:{
    	"nom":"base de données",
    	"examens.type":'EFM'
    	}}},{"nom":1}).sort({"groupe.filiere.modules.examens.note":-1}).limit(1)
  • 16 Afficher le le nom du stagaires qui la dernière note dans le module nom=base de données
    db.stagiaires.find({"groupe.filiere.modules":
    {$elemMatch:{
    	"nom":"base de données"
    	}}},{"nom":1}).sort({"groupe.filiere.modules.examens.note":1}).limit(1)
  • 17 Afficher le nom et la note de chaque stagiaire du groupe id=1
    db.stagiaires.find({"groupe._id":1},
    {"nom":1,"groupe.filiere.modules.examens.note":1})
  • 18 Modifier la note de tout les stagiaire du groupe id=1 en ajoutant +1
    db.stagiaires.updateMany({"groupe._id":1},
    {$inc:{"groupe.filiere.modules.$[].examens.$[].note":1}})
  • 19 Afficher la liste des stagiairs qui note>10 dans toutes les modules
    db.stagiaires.find({"groupe.filiere.modules.examens.note":{$gt:10}},{})
  • 20 Afficher la liste des stagiairs qui noteEFM>10 dans toutes les modules
    db.stagiaire.find({$and:[{"groupe.filiere.modules.examens.type":'EFM'},{"groupe.filiere.modules.examens.note":{$gt:1000}}]},{})