Controle 2

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

//partie 1

//1

db.artists.aggregate([
{
$lookup: {
from: "movies",
localField: "director",
foreignField: "_id",
as: "movies"
}
},
{
$unwind: "$movies"
},
{
$match: {
"movies.country": "FR",
"movies.year": { $lt: 2000 }
}
},
{
$group: {
_id: {
directorId: "$_id",
directorName: { $concat: ["$last_name", " ", "$first_name"] }
},
films: {
$push: {
$concat: [
"$movies.title",
" - ",
{ $toString: "$movies.year" },
" - ",
"$movies.country"
]
}
}
}
},
{
$project: {
_id: 0,
identité: "$_id.directorName",
films: 1
}
},
{
$sort: {
identité: 1
}
}
])
//2

db.artists.aggregate([
{
$match: {
"first_name": "John",
"last_name": "Travolta"
}
},
{
$lookup: {
from: "movies",
localField: "film",
foreignField: "_id",
as: "movies"
}
},
{
$unwind: "$movies"
},
{
$project: {
_id: 0,
titre: "$movies.title"
}
}
])

//3

db.artists.aggregate([
{
$match: {
"first_name": "Clint",
"last_name": "Eastwood"
}
},
{
$lookup: {
from: "movies",
localField: "director",
foreignField: "_id",
as: "movies"
}
},
{
$unwind: "$movies"
},
{
$group: {
_id: null,
nombre_de_films: { $sum: 1 }
}
},
{
$project: {
_id: 0,
"nombre_de_films_réalisés_par_Clint_Eastwood": "$nombre_de_films"
}
}
])

//4

db.artists.aggregate([
{
$lookup: {
from: "movies",
localField: "film",
foreignField: "_id",
as: "movies_as_actor"
}
},
{
$lookup: {
from: "movies",
localField: "director",
foreignField: "_id",
as: "movies_as_director"
}
},
{
$unwind: "$movies_as_actor"
},
{
$unwind: "$movies_as_director"
},
{
$match: {
$expr: {
$and: [
{ $eq: ["$movies_as_director._id", "$movies_as_actor._id"] },
{ $ne: ["$movies_as_director._id", "$film"] }
]
}
}
},
{
$project: {
_id: 0,
titre: "$movies_as_actor.title"
}
}
])

//5
db.artists.aggregate([
{
$match: {
"first_name": "Clint",
"last_name": "Eastwood"
}
},
{
$lookup: {
from: "movies",
localField: "film",
foreignField: "_id",
as: "movies_as_actor"
}
},
{
$lookup: {
from: "movies",
localField: "director",
foreignField: "_id",
as: "movies_as_director"
}
},
{
$unwind: "$movies_as_actor"
},
{
$match: {
$expr: {
$and: [
{ $ne: ["$movies_as_actor.director", "$movies_as_actor.film"] }, // Le film n'est
pas réalisé par Clint Eastwood
{ $in: ["$movies_as_actor._id", "$film"] } // Clint Eastwood est acteur dans ce film
]
}
}
},
{
$project: {
_id: 0,
film_où_clint_eastwood_est_acteur_mais_pas_réalisateur: "$movies_as_actor.title"
}
}
])

//partie 2

//6
db.infraction.aggregate([
{
$project: {
numéro: "$_id",
le: { $dateFromString: { dateString: "$date_inf", format: "%d/%m/%Y" } },
montant: { $sum: "$delits.tarif" }
}
},
{
$sort: { le: -1 }
},
{
$project: {
_id : 0,
numéro: 1,
le: { $dateToString: { date: "$le", format: "%d/%m/%Y" } },
montant: 1
}
}
])

//7

db.infraction.aggregate([
{
$match: {
"conducteur.num_permis": { $exists: false }
}
},
{
$project: {
_id: 1,
lieu: 1,
date: "$date_inf"
}
}
])

//8

db.infraction.aggregate([
{
$group: {
_id: "$date_inf",
"nombre d'infractions": { $sum: 1 }
}
},
{
$match: { "nombre d'infractions": { $gt: 0 } }
},
{
$project: {
_id: 0,
"date": "$_id",
"nombre d'infractions": 1
}
}])

9) db.infraction.aggregate([
{
$group: {
_id: "$conducteur.num_permis",
conducteur: {
$first: {
num_permis: "$conducteur.num_permis",
date_permis: "$conducteur.date_permis",
nom: "$conducteur.nom",
prenom: "$conducteur.prenom"
}
},
infractions: { $sum: 1 },
relevé: {
$push: {
numéro: "$_id",
lieu: "$lieu",
véhicule: {
num_immat: "$vehicule.num_immat",
date_immat: "$vehicule.date_immat",
marque: "$vehicule.marque",
modele: "$vehicule.modele"
},
proprio: {
num_permis: "$vehicule.proprio.num_permis",
date_permis: "$vehicule.proprio.date_permis",
nom: "$vehicule.proprio.nom",
prenom: "$vehicule.proprio.prenom"
},
délits: {
$map: {
input: "$delits",
as: "delit",
in: {
nature: "$$delit.nature",
tarif: { $toDouble: "$$delit.tarif" }
}
}
}
}
}
}
},
{
$sort: { "_id": 1 }
},
{
$project: {
_id: 0,
conducteur: 1,
infractions: 1,
relevé: 1
}
}
])

//10
db.infraction.aggregate([
{
$match: {
"conducteur.num_permis": {$exists: true, $ne: null}
}
},
{
$addFields: {
infractionDate: {
$dateFromString: {
dateString: "$date_inf",
format: "%d/%m/%Y",
}
},
permisDate: {
$dateFromString: {
dateString: "$conducteur.date_permis",
format: "%d/%m/%Y",
}
}
}
},
{
$match: {
$expr: {
$lt: [
{ $subtract: ["$infractionDate", "$permisDate"] },
1000 * 60 * 60 * 24 * 365
]
}
}
},
{
$project : {
_id : 0,
"n°infraction" : "$_id",
"date infraction" : {$dateToString: {format: "%d/%m/%Y", date: "$infractionDate"}},
permis : "$conducteur.num_permis",
"obtenu le" : "$conducteur.date_permis",
"identité" : {$concat : ["$conducteur.nom", " ", "$conducteur.prenom"]}
}
}
])

//11

db.infraction.aggregate([
{
$unwind: "$delits"
},
{
$group: {
_id: "$delits.nature",
nombre_infractions: { $sum: 1 }
}
},
{
$sort: {
nombre_infractions: -1
}
},
{
$project: {
_id: 0,
"délit": "$_id",
"nombre d'infractions": "$nombre_infractions"
}
}])

//12
db.infraction.aggregate([
{
$match: {
$expr: {
$ne: ["$conducteur.num_permis", "$vehicule.proprio.num_permis"]
}
}
},
{
$project: {
_id : 0,
numéro: "$_id",
le: "$date_inf",
}
}
])

You might also like