Как вы упомянули в комментариях. Так как DEATH_AGE
содержит пустую строку ""
, он не справляется с операцией сравнения $max
и ее выводом.
Примечание: Если бы поле DEATH_AGE
было пустым (не там)) или как null
даст ожидаемые результаты.
Исправление может состоять в том, чтобы просто отфильтровать не погибших президентов на стадии матча
Запрос:
db.collection.aggregate([
{
$match: {
"PARTY": "Democratic",
"DEATH_AGE": {
"$exists": true,
"$ne": ""
}
}
},
{
"$group": {
"_id": null,
"Maximum_Death_Age": {
"$max": "$DEATH_AGE"
}
}
}
])
Альтернативный запрос: (Если вы не обязаны использовать $max
с $group
) Сортировка по DEATH_AGE
по убыванию и выбор первого $limit
db.collection.aggregate([
{
$match: {
"PARTY": "Democratic",
"DEATH_AGE": {
"$exists": true,
"$ne": ""
}
}
},
{
$sort: {
"DEATH_AGE": -1
}
},
{
$limit: 1
}
]);
Приведенный выше запрос также может быть оптимизирован, поскольку в документации говорится:
Когда сортировка $ предшествует пределу $, и нет промежуточных этапов, которые изменяютПо количеству документов оптимизатор может объединить лимит $ в $ sort. Это позволяет операции $ sort поддерживать только верхние n результатов по мере ее продвижения, где n - указанное ограничение, и гарантирует, что MongoDB необходимо хранить только n элементов в памяти.