Interroger MongoDB : find et agrégation

Le langage de requête de MongoDB : filtres et opérateurs, tableaux, projection, tri, puis pipeline d'agrégation étape par étape.

  • 23 cartes
  • 4 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation

Quelques cartes du deck

  • Filtre (find) : de quoi s'agit-il ?

    Voir la réponse

    Premier argument d'une recherche MongoDB : un document qui décrit les conditions que doivent remplir les documents rendus.

    { annee: 2000, genres: "SF" } combine les conditions par un ET implicite ; un filtre vide {} rend toute la collection.

  • La collection films contient Alien (1979, genres ["SF", "Horreur"]), Matrix (1999, ["SF", "Action"]), Her (2013, ["SF", "Drame"]) et Amélie (2001, ["Comédie"]). Que rend db.films.find({ annee: { $gte: 2000 }, genres: "SF" }) ?

    • Her seulement
    • Her et Amélie
    • Alien, Matrix et Her
    • Matrix et Her
    Voir la réponse

    Her seulement

    Un filtre d'égalité sur un tableau retient les documents dont le tableau contient la valeur. Les deux conditions doivent tenir : Amélie a l'année mais pas le genre, Alien et Matrix ont le genre mais pas l'année.

  • Dans un pipeline, l'étape … regroupe les documents selon une clé et calcule des totaux avec des accumulateurs comme ….

    Voir la réponse

    Dans un pipeline, l'étape $group regroupe les documents selon une clé et calcule des totaux avec des accumulateurs comme $sum.

    { $group: { _id: "$produit", total: { $sum: "$montant" } } } rend un document par produit.

  • Projection : de quoi s'agit-il ?

    Voir la réponse

    Second argument d'une recherche : il choisit les champs qui figurent dans les documents rendus.

    { titre: 1 } garde le titre, mais _id est rendu aussi sauf si on écrit _id: 0.

  • db.films.find({ annee: "2013" }) ne rend rien alors que Her est bien dans la collection. Quelle correction est juste ?

    • Ajouter $exists: true au filtre
    • Remplacer find par aggregate avec le même filtre
    • Créer un index sur annee
    • Comparer avec le nombre : { annee: 2013 }
    Voir la réponse

    Comparer avec le nombre : { annee: 2013 }

    MongoDB distingue les types : l'année est stockée comme un nombre, et la chaîne "2013" ne lui est jamais égale. Un index accélère une recherche, il ne change pas ce qu'elle trouve.