使用 MongoDB 上的最大字段查询 object
Query object with max field on MongoDB
我是 MongoDB 的新手,我使用 Atlas & Charts 来查询和可视化结果。
我想创建一个图表,显示每天的最大金额,并指出拥有最大金额的人。
例如:
如果我的 collection 包含以下文件:
{"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" }
}
}
])
例子here
这是如何运作的?好吧,使用 $group
有一个“问题”,就是除非使用累加器,否则您无法为下一阶段保留值,因此,最好的方法似乎是使用 $first
来获取名字。
这就是为什么按 money
后代排序,以获取其 money
值在第一个位置最大的名称。
所以,排序我们确保第一个值是你想要的。
然后使用 group
将具有相同 date
的文档分组并创建字段 max_money
和 the_person_with_max_money
.
我是 MongoDB 的新手,我使用 Atlas & Charts 来查询和可视化结果。 我想创建一个图表,显示每天的最大金额,并指出拥有最大金额的人。
例如: 如果我的 collection 包含以下文件:
{"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" }
}
}
])
例子here
这是如何运作的?好吧,使用 $group
有一个“问题”,就是除非使用累加器,否则您无法为下一阶段保留值,因此,最好的方法似乎是使用 $first
来获取名字。
这就是为什么按 money
后代排序,以获取其 money
值在第一个位置最大的名称。
所以,排序我们确保第一个值是你想要的。
然后使用 group
将具有相同 date
的文档分组并创建字段 max_money
和 the_person_with_max_money
.