$max
för att få maxvärde frånkey
array av fälta
, detta returnerar-15
enligt dina dokument$filter
för att få objekt som är lika med-15
värde$first
hämta första objektet från returnerat resultat från$filter
db.collection.aggregate([
{
$addFields: {
winner: {
$first: {
$filter: {
input: "$key",
cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
}
}
}
}
}
])
Andra alternativet med $reduce
operatör,
- ställ in initialfältet
maxValue
i reducera, maximalt värde frånkey
array av fälta
- kontrollera skick om
maxValue
ocha
värdematchning returnerar sedan maxobjekt
db.collection.aggregate([
{
$addFields: {
winner: {
$reduce: {
input: "$key",
initialValue: { maxValue: { $max: "$key.a" } },
in: {
$cond: [
{ $eq: ["$$this.a", "$$value.maxValue"] },
"$$this",
"$$value"
]
}
}
}
}
}
])