首页 > 解决方案 > 在 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

标签: mongodbmongodb-querymongodb-atlasmongodb-charts

解决方案


你必须使用一个aggregation,我认为这应该有效。

首先是$sortmoney(我稍后会解释为什么)。

然后使用$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_moneythe_person_with_max_money.


推荐阅读