MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggregazione Mongodb:$reduce non funziona come previsto

  • $max per ottenere il valore massimo da key matrice del campo a , questo restituirà -15 secondo i tuoi documenti
  • $filter per ottenere un oggetto uguale a -15 valore
  • $first ottieni il primo oggetto dal risultato restituito da $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Parco giochi

Seconda opzione usando $reduce operatore,

  • imposta il campo iniziale maxValue in riduci, valore massimo da key matrice del campo a
  • verifica la condizione se maxValue e a corrisponde al valore, quindi restituisce il massimo oggetto
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Parco giochi