mongodb - 在 MongoDB 上使用 max 字段查询对象
问题描述
我是 MongoDB 新手,我使用 Atlas & Charts 来查询和可视化结果。我想创建一个图表,显示每天的最大金额,并指出拥有最大金额的人。
例如:如果我的收藏包含以下文档:
{"date": "15-12-2020", "name": "alice", "money": 7}
{"date": "15-12-2020", "name": "bob", "money": 9}
{"date": "16-12-2020", "name": "alice", "money": 39}
{"date": "16-12-2020", "name": "bob", "money": 25}
为了创建具有以下结果的图形,我在查询框(在“图表”上)应该使用什么查询?
date | max_money | the_person_with_max_money
15-12-2020 9 bob
16-12-2020 39 alice
解决方案
你必须使用一个aggregation
,我认为这应该有效。
首先是$sort
值money
(我稍后会解释为什么)。
然后使用$group
对值进行分组date
。
查询如下所示:
db.collection.aggregate([
{
"$sort": { "money": -1 }
},
{
"$group": {
"_id": "$date",
"max_money": { "$max": "$money" },
"the_person_with_max_money": { "$first": "$name" }
}
}
])
这里的例子
这是如何工作的?好吧,使用 , 存在一个“问题” $group
,除非您使用累加器,否则您无法保留下一阶段的值,因此,最好的方法似乎是使用$first
来获取名字。
这就是为什么按后代排序的原因,以获得在第一个位置值最大money
的名称。money
因此,排序我们确保第一个值是您想要的。
然后使用group
将相同的文档分组date
并创建字段max_money
和the_person_with_max_money
.
推荐阅读
- javascript - 未捕获的类型错误:无法读取 HTMLFormElement 处未定义的属性“then”。
- elasticsearch - KIBANA 和 ELASTICSEARCH 配置 CA
- html - 响应式进度条垂直对齐
- chef-infra - 如何在测试厨房的节点上启用特定的 Ohai 插件
- mysql - 检查日期可用性的子查询
- c++ - 使用 Conan 直接从 GitHub 安装包
- omnet++ - 如何将 'const omnetpp::SimTime' 转换为 'double'
- dialogflow-es - 在荷兰测试 Actions on Google Transaction API 时出现“抱歉,我无法在您所在地区收款”消息
- aurelia - 在转发器中使用 @computedFrom 数组
- r - 具有灵活函数参数的复杂 if else 函数的代码改进