db.pokemons.insertMany([ { name: 'Tadmorv', type: ['Poison'], attacks: [ { name: 'Acid', damages: 60 }, { name: 'Detritus', damages: 65 } ], hp: 120, level: 25 }, { name: 'Ronflex', type: ['Normal'], attacks: [ { name: 'Repos' }, { name: 'Plaquage', damages: 85 } ], hp: 250, level: 35 }, { name: 'Salameche', type: ['Feu'], attacks: [ { name: 'Flammeche', damages: 40 }, { name: 'Charge', damages: 40 } ], hp: 40, level: 12 }, { name: 'Ectoplasma', type: ['Spectre', 'Poison'], attacks: [ { name: 'Hypnose', damages: 53 }, { name: 'Léchouille', damages: 150 } ], hp: 150, level: 50 }, { name: 'Canarticho', type: ['Normal', 'Vol'], attacks: [ { name: 'Picpic', damages: 13 }, { name: 'Jet de Sable', damages: 2 } ], hp: 80, level: 13 }, { name: 'Magmar', type: ['Feu', 'Moche'], attacks: [ { name: 'Lance Flamme', damages: 120 }, { name: 'Griffe', damages: 40 } ], hp: 22, level: 12 } ]); db.trainers.insertMany([ { name: 'Sasha', sexe: 'Male', birthDate: new Date('31/12/2000'), badges: ['Roche', 'Eau', 'Feu', 'Plante', 'Foudre'], nbPokemons: 42 }, { name: 'Ondine', sexe: 'Female', birthDate: new Date('15/09/1999'), badges: ['Plante', 'Eau', 'Feu', 'Psy'], nbPokemons: 35 }, { name: 'Pierre', sexe: 'Male', birthDate: new Date('15/09/1989'), badges: ['Glace'], nbPokemons: 4 }, { name: 'Jean michel', sexe: 'Female', birthDate: new Date('15/09/2015'), badges: [], nbPokemons: 12 }, { name: 'Jean bob mauvais badges', sexe: 'Male', birthDate: new Date('12/09/2012'), badges: 'lol', nbPokemons: 7 } ]); db.cities.insertMany([ { name: 'Jadielle', champion: 'Giovanni', position: '50.40', pokemons: [{ name: 'Persian' }, { name: 'Triopikeur' }, { name: 'Nidoking' }] }, { name: 'Carmin Sur Mer', champion: 'Bob', position: '120.12', pokemons: [{ name: 'Raichu' }, { name: 'Pikachu' }, { name: 'Voltorbe' }] }, { name: 'Safrania', champion: 'Morgane', position: '-50.63', pokemons: [{ name: 'Alakazham' }, { name: 'Aeromite' }, { name: 'Mr Mime' }] }, { name: 'Safrania', champion: 'Morgane', position: '-50.63', pokemons: [{ name: 'Alakazham' }, { name: 'Aeromite' }, { name: 'Mr Mime' }] }, { name: 'Parmanie', champion: 'Koga', position: '45.110', pokemons: [{ name: 'Smogo' }, { name: 'Grotadmorv' }, { name: 'Smogogo' }] }, { name: 'Azuria', champion: 'Ondine', position: '4.10', pokemons: [{ name: 'Staross' }, { name: 'Poissirene' }, { name: 'Stari' }] } ]); // ------- // Récupérer tout les pokemons db.pokemons.find() // Affichage plus joli db.pokemons.find().pretty() // Récupérer tous les dresseurs masculins db.trainers.find( { sexe : 'Male' } ).pretty() // Récupérer tous les pokemons de type feu db.pokemons.find( { type : 'Feu' } ).pretty() // Retourne les dresseurs dont le nombre de poke = 42 db.trainers.find( { nbPokemons : 42 } ).pretty() // Compte le nombre de dresseurs dont le nombre de poke = 42 db.trainers.count( { nbPokemons : 42 } ) // Retourne les dresseurs dont le nombre de poke >= 10 // Greater Than or Equal db.trainers.find( { nbPokemons : {$gte : 30} } ).pretty() // Récupérer toutes les dresseuses (sexe féminin) qui ont plus de 10 pokémons db.trainers.find( { $and: [ { nbPokemons : {$gte : 10} }, { sexe : 'Female' } ] } ).pretty() // Compte le nombre de badges d'un dresseurs db.trainers.aggregate([ { $project: { item: 1, numberOfBadges: { $cond: { if: { $isArray: "$badges" }, then: { $size: "$badges" }, else: "NA"} } } } ] ) // Récupérer tous les dresseurs qui possèdent au moins 3 badges // https://docs.mongodb.com/manual/reference/operator/aggregation/size/#example // $project sert de pattern pour définir ce qui sera affiché, $size pour compter // On définit un nouveau champ 'numberOfBadges' que nous testerons à l'aide de $match db.trainers.aggregate([ { $project: { name: 1, birthDate: 1, badges: 1, numberOfBadges: { $cond: { if: { $isArray: "$badges" }, then: { $size: "$badges" }, else: "NA" } }, nbPokemons: 1 } }, { $match: { "numberOfBadges": { $gte:3 } } } ]).pretty() // Note : une autre solution, beaucoup plus simple, à l'aide de $expr // Fonctionne si l'ensemble des badges contiennent un tableau db.trainers.find( { $expr: { $gt: [ { $size: "$badges"}, 1 ] } }); db.trainers.find( { $expr: { $cond: { if: { $isArray: "$badges" }, then: { $gt: [ { $size: "$badges"}, 3 ] }, else: 0 } } }).pretty() // Récupérer tous les dresseurs qui ont plus de 10 ans db.trainers.aggregate( [ { $project: { date: "$birthDate", age: { $divide: [ {$subtract: [ new Date(), "$birthDate" ] }, (365 * 24*60*60*1000) ] } } },{$match:{"age":{$gte:10}}} ] )