TP NoSQL – MongoDB en Java
Correction complete
Connexion a MongoDB en Java
import com . mongodb . client .*;
import com . mongodb . client . model .*;
import org . bson . Document ;
import java . util .*;
MongoClient mongoClient = MongoClients . create ( " mongodb :// localhost :27017 " ) ;
MongoDatabase database = mongoClient . getDatabase ( " mydb " ) ;
MongoCollection < Document > books = database . getCollection ( " books " ) ;
Partie II : Requêtes MQL en Java
1. Afficher les 200 premiers documents
books . find ()
. limit (200)
. forEach ( System . out :: println ) ;
2. Afficher titre, isbn et pages des livres de la categorie "Internet" + compter
books . find ( Filters . eq ( " categories " , " Internet " ) )
. projection ( Projections . fields (
Projections . include ( " title " , " isbn " , " pageCount " )
) ) . forEach ( System . out :: println ) ;
long count = books . countDocuments ( Filters . eq ( " categories " , " Internet " ) ) ;
System . out . println ( " Total : " + count ) ;
3. Trier par isbn croissant les livres de « David A. Black » ayant plus de 300
pages
books . find ( Filters . and (
Filters . eq ( " authors " , " David A . Black " ) ,
Filters . gt ( " pageCount " , 300)
))
. sort ( Sorts . ascending ( " isbn " ) )
. forEach ( System . out :: println ) ;
1
4. Livres dont le titre contient "Action" publies en 2011
books . find ( Filters . and (
Filters . regex ( " title " , " Action " , " i " ) ,
Filters . eq ( " publishedDate . year " , 2011)
))
. forEach ( System . out :: println ) ;
5. Ajouter un champ "emprunte" = "etudiants" aux livres MongoDB
books . updateMany (
Filters . regex ( " title " , " MongoDB " , " i " ) ,
Updates . set ( " emprunte " , " etudiants " )
);
6. Livres avec pages = 0 ou auteurs vide. Supprimer le champ vide.
// Afficher
books . find ( Filters . or (
Filters . eq ( " pageCount " , 0) ,
Filters . size ( " authors " , 0)
) ) . forEach ( System . out :: println ) ;
// Suppression des champs vides
books . updateMany ( Filters . eq ( " pageCount " , 0) ,
Updates . unset ( " pageCount " ) ) ;
books . updateMany ( Filters . size ( " authors " , 0) ,
Updates . unset ( " authors " ) ) ;
7. Auteurs publiant dans la categorie Microsoft (tries par pages decroissant)
books . aggregate ( Arrays . asList (
Aggregates . match ( Filters . eq ( " categories " , " Microsoft " ) ) ,
Aggregates . unwind ( " $authors " ) ,
Aggregates . sort ( Sorts . descending ( " pageCount " ) ) ,
Aggregates . project ( Projections . fields (
Projections . include ( " authors " , " pageCount " , " title " )
))
) ) . forEach ( System . out :: println ) ;
8. Ajouter deux auteurs (le prof et l’etudiant) aux livres contenant "Database"
books . updateMany (
Filters . regex ( " title " , " Database " , " i " ) ,
Updates . addEachToSet ( " authors " ,
Arrays . asList ( " Pr . Nassima Soussi " , " Moi ( Etudiant ) " )
)
);
2
9. Selectionner les livres qui n’appartiennent pas a certaines categories et
publies en 2009 ou 2011
books . find ( Filters . and (
Filters . nin ( " categories " , Arrays . asList (
" Business " , " Microsoft " , " Microsoft . NET " , " In Action "
)),
Filters . in ( " publishedDate . year " , Arrays . asList (2009 , 2011) )
))
. projection ( Projections . fields (
Projections . include ( " title " , " publishedDate " , " categories " )
))
. forEach ( System . out :: println ) ;
10. Moyenne des pages par categorie, tri decroissant
books . aggregate ( Arrays . asList (
Aggregates . unwind ( " $categories " ) ,
Aggregates . group ( " $categories " ,
Accumulators . avg ( " avgPages " , " $pageCount " )
),
Aggregates . sort ( Sorts . descending ( " avgPages " ) )
) ) . forEach ( System . out :: println ) ;
11. Pour chaque auteur : liste des categories où il publie (avec $addToSet),
stocker dans une nouvelle collection
MongoCollection < Document > result =
database . getCollection ( " authors_categories " ) ;
books . aggregate ( Arrays . asList (
Aggregates . unwind ( " $authors " ) ,
Aggregates . unwind ( " $categories " ) ,
Aggregates . group ( " $authors " ,
Accumulators . addToSet ( " categories " , " $categories " )
),
Aggregates . out ( " authors_categories " )
) ) . forEach ( System . out :: println ) ;
System . out . println ( " Collection authors_categories creee ! " ) ;