MongoDB – Example Page

Toutes les questions avec leur requête, prêtes à copier-coller.

TD1. Manhattan : noms + scores < 10
TD1
db.restaurants.find(
  {"borough":"Manhattan","grades.score":{$lt:10}},
  {"name":1,"grades.score":1,"_id":0}
)
TD1. Manhattan : exclure score ≥ 10
TD1
db.restaurants.find(
  {"borough":"Manhattan","grades.score":{$lt:10,$not:{$gte:10}}},
  {"name":1,"grades.score":1,"_id":0}
)
TD1. Grade "C" avec score < 30
TD1
db.restaurants.find(
  {"grades.grade":"C","grades.score":{$lt:30}},
  {"name":1,"grades.grade":1,"grades.score":1}
)
TD1. Styles de cuisine (distinct)
TD1
db.restaurants.distinct("cuisine")
TD1. Tous les grades possibles
TD1
db.restaurants.distinct("grades.grade")
TD1. Compter les restaurants "French"
TD1
db.restaurants.countDocuments({cuisine:"French"})
TD1. Nombre de restos sur "Central Avenue"
TD1
db.restaurants.find({"address.street":"Central Avenue"}).count()
TD1. Nombre avec score > 50
TD1
db.restaurants.countDocuments({"grades.score":{$gt:50}})
TD1. Lister (nom, immeuble, rue)
TD1
db.restaurants.find({}, {name:1,"address.building":1,"address.street":1,_id:0})
TD1. Restaurants "Burger King" (nom + borough)
TD1
db.restaurants.find({name:"Burger King"},{name:1,borough:1,_id:0})
TD1. Rues "Union Street" ou "Union Square"
TD1
db.restaurants.find({"address.street":{$in:["Union Street","Union Square"]}})
TD1. Latitude > 40.90
TD1
db.restaurants.find({"address.coord.1":{$gt:40.90}})
TD1. Score = 0 et grade "A"
TD1
db.restaurants.find({"grades.score":0,"grades.grade":"A"})
TD1. Zone géo (box) : index + requête
TD1
db.restaurants.createIndex({"address.coord.coordinates":"2dsphere"})
db.restaurants.find({
  "address.coord":{$geoWithin:{$box:[[-74.2,40.2],[-74.5,40.5]]}}
})
TD2. Ajouter comment "Ok" si pas de grade C
TD2
db.restaurants.updateMany(
  {"grades.grade":{$not:{$eq:"C"}}},
  {$set:{comment:"Ok"}}
)
TD2. Supprimer restaurants note = 0
TD2
db.restaurants.deleteMany({"note":0})
TD2. #restos par cuisine (Bronx, tri croissant)
TD2
db.restaurants.aggregate([
  {$match:{borough:"Bronx"}},
  {$group:{_id:"$cuisine",totalRestaurants:{$sum:1}}},
  {$sort:{totalRestaurants:1}}
])
TD2. Top 5 noms (Bronx, A→Z)
TD2
db.restaurants.find({borough:"Bronx"}).sort({name:1}).limit(5)
TD2. #restos par zipcode
TD2
db.restaurants.aggregate([
  {$group:{_id:"$address.zipcode",totalRestaurants:{$sum:1}}}
])
TD2. Unwind grades → nom + date + grade
TD2
db.restaurants.aggregate([
  {$unwind:"$grades"},
  {$project:{name:1,"grades.date":1,"grades.grade":1}}
])
TD2. Set zipcode = "10463" (id=30075445)
TD2
db.restaurants.updateOne(
  {restaurant_id:"30075445"},
  {$set:{"address.zipcode":"10463"}}
)
TD2. Supprimer "Bakery" (Bronx)
TD2
db.restaurants.deleteMany({borough:"Bronx",cuisine:"Bakery"})
TD2. Insérer un document (exemple)
TD2
db.restaurants.insertOne({"toto":"titi"})
TD2. Soups : nom + borough
TD2
db.restaurants.find({cuisine:"Soups"},{name:1,borough:1,_id:0})
TD2. Nb de restos ayant eu un grade "Z"
TD2
db.restaurants.countDocuments({"grades.grade":"Z"})
TD2. #restos par borough
TD2
db.restaurants.aggregate([
  {$group:{_id:"$borough",total_restaurants:{$sum:1}}}
])
TD2. Top 5 cuisines (NYC)
TD2
db.restaurants.aggregate([
  {$group:{_id:"$cuisine",count:{$sum:1}}},
  {$sort:{count:-1}},
  {$limit:5}
])
TD2. Par grade : n, avg, min, max
TD2
db.restaurants.aggregate([
  {$unwind:"$grades"},
  {$group:{
    _id:"$grades.grade",
    count:{$sum:1},
    avg_score:{$avg:"$grades.score"},
    min_score:{$min:"$grades.score"},
    max_score:{$max:"$grades.score"}
  }}
])
TD2. Ajouter comment "A vérifier" si pas d'évaluation
TD2
db.restaurants.updateMany(
  {grades:{$exists:false}},
  {$set:{comment:"A vérifier"}}
)
TD2. Top 10 chaînes (par nom)
TD2
db.restaurants.aggregate([
  {$group:{_id:"$name",count:{$sum:1}}},
  {$sort:{count:-1}},
  {$limit:10}
])
TD3. Nb restos dans l'aire "east"
TD3
db.restaurants.find({"address.coord":{$within:{$geometry:east}}}).count()
TD3. Noms des restos dans une aire (Polygon)
TD3
var aire={ "type":"Polygon","coordinates":[[
  [-73.991000,40.72000],[-73.991599,40.72599],
  [-73.991599,40.72999],[-73.991000,40.72000]
]]}
db.restaurants.find(
  {"address.coord":{$within:{$geometry:aire}}},
  {name:1,_id:0}
)
TD3. Lister toutes les années (grades)
TD3
db.restaurants.aggregate([
  {$unwind:"$grades"},
  {$project:{year:{$year:"$grades.date"}}},
  {$group:{_id:"$year"}},
  {$sort:{_id:1}}
])
TD3. #occurrences par année
TD3
db.restaurants.aggregate([
  {$unwind:"$grades"},
  {$project:{year:{$year:"$grades.date"}}},
  {$group:{_id:"$year",count:{$sum:1}}},
  {$sort:{_id:1}}
])
TD3. (année, #restos distincts inspectés)
TD3
db.restaurants.aggregate([
  {$unwind:"$grades"},
  {$project:{year:{$year:"$grades.date"},restaurant_id:"$restaurant_id"}},
  {$group:{_id:{year:"$year"},restaurant_count:{$addToSet:"$restaurant_id"}}},
  {$project:{year:"$_id.year",restaurant_count:{$size:"$restaurant_count"}}},
  {$sort:{year:1}}
])
TD3. Année avec le plus de restos inspectés
TD3
db.restaurants.aggregate([
  {$unwind:"$grades"},
  {$project:{year:{$year:"$grades.date"},restaurant_id:"$restaurant_id"}},
  {$group:{_id:{year:"$year"},restaurant_count:{$addToSet:"$restaurant_id"}}},
  {$project:{year:"$_id.year",restaurant_count:{$size:"$restaurant_count"}}},
  {$sort:{restaurant_count:-1}},
  {$limit:1}
])
TD3. Rues présentes dans > 2 boroughs
TD3
db.restaurants.aggregate([
  {$group:{_id:"$address.street",boroughs:{$addToSet:"$borough"}}},
  {$project:{street:"$_id",boroughCount:{$size:"$boroughs"}}},
  {$match:{boroughCount:{$gt:2}}},
  {$project:{_id:0,street:1}}
])
TD3. Restaurants avec uniquement des grades "A"
TD3
db.restaurants.aggregate([
  {$group:{_id:"$name",gradesSet:{$addToSet:"$grades.grade"},allGrades:{$push:"$grades"}}},
  {$match:{gradesSet:{$eq:["A"]}}},
  {$project:{_id:0,restaurant_name:"$_id",grades:"$allGrades"}}
])
TP4. Nombre exact de pays
TP4
db.world.countDocuments({})
TP4. Liste des continents
TP4
db.world.distinct("Continent")
TP4. Infos France
TP4
db.world.find({ Name: "France" })
TP4. Europe : pays < 100000 hab.
TP4
db.world.find(
  { Continent: "Europe", Population: { $lt: 100000 } },
  { Name: 1, Population: 1, _id: 0 }
)
TP4. Océanie : pays indépendants
TP4
db.world.find(
  { Continent: "Oceania", IndepYear: { $exists: true, $ne: null } },
  { Name: 1, IndepYear: 1, _id: 0 }
)
TP4. Plus gros continent (surface)
TP4
db.world.aggregate([
  { $group: { _id: "$Continent", surface: { $sum: "$SurfaceArea" } } },
  { $sort: { surface: -1 } },
  { $limit: 1 }
])
TP4. Par continent : #pays, pop, #indép.
TP4
db.world.aggregate([
  { $group: {
    _id: "$Continent",
    nbPays: { $sum: 1 },
    popTotale: { $sum: "$Population" },
    nbIndep: { $sum: { $cond: [ { $ifNull: ["$IndepYear", false] }, 1, 0 ] } }
  }},
  { $sort: { _id: 1 } }
])
TP4. France : population des villes (total)
TP4
db.world.aggregate([
  { $match: { Name: "France" } },
  { $unwind: "$Cities" },
  { $group: { _id: null, populationVilles: { $sum: "$Cities.Population" } } }
])
TP4. Capitale de la France (nom + pop)
TP4
db.world.aggregate([
  { $match: { Name: "France" } },
  { $unwind: "$Cities" },
  { $match: { "Cities.Capital": true } },
  { $project: { _id: 0, City: "$Cities.Name", Population: "$Cities.Population" } }
])
TP4. Langues parlées dans > 15 pays
TP4
db.world.aggregate([
  { $unwind: "$Languages" },
  { $group: { _id: "$Languages.Language", pays: { $addToSet: "$Code" } } },
  { $project: { _id: 0, Language: "$_id", nbPays: { $size: "$pays" } } },
  { $match: { nbPays: { $gt: 15 } } },
  { $sort: { nbPays: -1, Language: 1 } }
])
TP4. Pays avec ≥ 100 villes (compte)
TP4
db.world.aggregate([
  { $project: { Name: 1, cityCount: { $size: { $ifNull: ["$Cities", []] } } } },
  { $match: { cityCount: { $gte: 100 } } },
  { $sort: { cityCount: -1, Name: 1 } }
])
TP4. Top 10 villes les plus peuplées (+ pays)
TP4
db.world.aggregate([
  { $unwind: "$Cities" },
  { $project: { _id: 0, Country: "$Name", City: "$Cities.Name", Population: "$Cities.Population" } },
  { $sort: { Population: -1 } },
  { $limit: 10 }
])
TP4. Pays où le français est officiel
TP4
db.world.find(
  { Languages: { $elemMatch: { Language: "French", IsOfficial: true } } },
  { _id: 0, Name: 1 }
)
TP4. Top 5 pays avec le plus de langues
TP4
db.world.aggregate([
  { $project: { Name: 1, langCount: { $size: { $ifNull: ["$Languages", []] } } } },
  { $sort: { langCount: -1, Name: 1 } },
  { $limit: 5 }
])