我想展示所有死于最高年龄的民主党总统的死亡年龄。
我的查询是:
db.PRESIDENT.aggregate([
{ $match: { PARTY: "Democratic" } },
{ $group: { "_id": null, "Maximum_Death_Age": { $max: "$DEATH_AGE" } } }
]);
我得到的输出:
{ "_id" : null, "Maximum_Death_Age" : "" }
收藏:
答案 0 :(得分:0)
正如您在评论中提到的。因为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
降序排序,并选择第一个{{1} }
$limit
上面的查询也可能是一个优化的查询,因为文档中说:
当$ sort在$ limit之前并且没有中间阶段时 修改文档的数量,优化器可以合并 将$ limit放入$ sort。这允许$ sort操作仅 保持进程前进的前n个结果,其中n是指定的 限制,并确保MongoDB仅需要在内存中存储n个项目。