MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Aggregation:$reduce funktioniert nicht wie erwartet

  • $max um den maximalen Wert von key zu erhalten Array des Feldes a , dies gibt -15 zurück gemäß Ihren Unterlagen
  • $filter um ein Objekt zu erhalten, das gleich -15 ist Wert
  • $first Holen Sie sich das erste Objekt aus dem zurückgegebenen Ergebnis von $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Spielplatz

Zweite Option mit $reduce Betreiber,

  • Anfangsfeld maxValue setzen in Reduce, Maximalwert aus key Array des Feldes a
  • Bedingung prüfen, wenn maxValue und a Wertübereinstimmung gibt dann maximales Objekt zurück
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Spielplatz