MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Agrégation Mongodb :$reduce ne fonctionne pas comme prévu

  • $max pour obtenir la valeur maximale de key tableau du champ a , cela renverra -15 selon vos documents
  • $filter pour obtenir un objet égal à -15 valeur
  • $first obtenir le premier objet du résultat renvoyé par $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Aire de jeux

Deuxième option utilisant $reduce opérateur,

  • définir le champ initial maxValue dans reduce, valeur maximale de key tableau du champ a
  • vérifier la condition si maxValue et a la valeur correspond puis renvoie l'objet max
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Aire de jeux