sql >> Base de Datos >  >> NoSQL >> MongoDB

Agregación de Mongodb:$ reducir no funciona como se esperaba

  • $max para obtener el valor máximo de key matriz de campo a , esto devolverá -15 según sus documentos
  • $filter para obtener un objeto igual a -15 valor
  • $first obtener el primer objeto del resultado devuelto por $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Patio de juegos

Segunda opción usando $reduce operador,

  • establecer el campo inicial maxValue en reducir, valor máximo de key matriz de campo a
  • verificar condición si maxValue y a coincidencia de valor y luego devuelve el objeto máximo
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Patio de juegos