2 votes

Comment puis-je obtenir la projection de certains champs d'un document spécifique incorporé dans un tableau ?

Prenons l'exemple (simplifié) suivant :

{
  _id: 1,
  name: "Andrew",
  role: "ATT",
  Sesons: [
            {
             year: "2018-2019",
             age: 20,
             goals: 10
             }, 
             {
             year: "2019-2020",
             age: 21,
             goals: 101
             }]
}
{
  _id: 2,
  name: "Paul",
  role: "DF",
  Sesons: [
            {
             year: "2018-2019",
             age: 15,
             goals: 102
             }, 
             {
             year: "2019-2020",
             age: 16,
             goals: 1
             }]
}

Comment puis-je obtenir ce résultat spécifique à partir d'une requête, basée sur {"Seasons.year" : "2019-2020"} par exemple ?

{_id: 2, name: "Paul", role: "DF", Seasons: {age: 16}}

Et comment puis-je obtenir ce résultat à partir d'une requête en récupérant un document intégré entier ?

{_id: 2, name: "Paul", role: "DF", Seasons: {year: "2018-2019", age: 16, goals: 1}}

Merci beaucoup ! Je m'excuse pour la question, peut-être, pas correctement formatée, mais c'est ma première question sur Stack Overflow.

0voto

varman Points 440

Vous pouvez utiliser projection Vous pouvez faire une requête comme suit.

[
  {
    $match: {
      "_id": 2
    }
  },
  {
    $project: {
      _id: 1,
      name: 1,
      role: 1,
      Sesons: {
        $filter: {
          input: "$Sesons",
          cond: {
            $eq: [
              "$$this.year",
              "2019-2020"
            ]
          }
        }
      }
    }
  }
]

Travail Terrain de jeu Mongo . Une fois que vous avez obtenu votre résultat, utilisez à nouveau la fonction $project pour obtenir uniquement l'âge avec d'autres champs. Ex :

{
    $project: {
      "Sesons.year": 0,
      "Sesons.goals": 0
    }
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X