mongodb - MongoDB:使用最大聚合进行匹配和分组
问题描述
我想显示所有去世最年长的民主党总统的死亡年龄。
我的查询是:
db.PRESIDENT.aggregate([
{ $match: { PARTY: "Democratic" } },
{ $group: { "_id": null, "Maximum_Death_Age": { $max: "$DEATH_AGE" } } }
]);
我得到的输出:
{ "_id" : null, "Maximum_Death_Age" : "" }
收藏:
输出图像: 在此处输入图像描述
解决方案
正如你在评论中提到的。因为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 在 $limit 之前并且没有修改文档数量的干预阶段时,优化器可以将 $limit 合并到 $sort 中。这允许 $sort 操作在进行时只维护前 n 个结果,其中 n 是指定的限制,并确保 MongoDB 只需要在内存中存储 n 个项目。
推荐阅读
- python - 范围为“类”的 Pytest 夹具不适用于“setup_class”方法
- c# - 在操作方法中使用 HttpServerUtilityWrapper 时,获取为此对象定义的无参数构造函数
- ruby - 使用厨师安装kafka期间文件解压缩错误
- paypal - 更改订阅计划和计费差额
- python - KIVY:如何多任务处理
- mysql - 尝试在 Ubuntu 20.04 中安装 mysql 时未满足的依赖项
- angular - Buttonclick 上的 Angular 9 Reloading Component 仅每秒钟工作一次
- python - 如何为要在 Django 管理员上显示的上传视频提供用户明智的数字
- java - 在 apache camel 中使用 xpath 从 xml 中获取值
- javascript - 用户验证在哪里完成?