使用 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(稍后我会解释原因)。

然后使用 $groupdate 对值进行分组。

查询如下所示:

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_moneythe_person_with_max_money.