首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mongodb如何获得每个“具有相同密钥的组”的最大值

mongodb如何获得每个“具有相同密钥的组”的最大值
EN

Stack Overflow用户
提问于 2016-11-25 11:46:08
回答 2查看 2.7K关注 0票数 1

我有一个收藏品:

代码语言:javascript
运行
复制
{'name':'ada','updateTime':'2016-11-25'}
{'name':'bob','updateTime':'2016-11-25'}
{'name':'ada','updateTime':'2016-11-20'}
{'name':'bob','updateTime':'2016-11-20'}
{'name':'ada','updateTime':'2016-11-15'}
{'name':'bob','updateTime':'2016-11-15'}
...

如果我希望得到的结果是,相同“名称”的“updateTime”的最大值:

代码语言:javascript
运行
复制
{'name':'ada','updateTime':'2016-11-25'}
{'name':'bob','updateTime':'2016-11-25'}
...

或者最终得到一条蟒蛇的字典:

代码语言:javascript
运行
复制
{'ada':'2016-11-25','bob':'2016-11-25',...}

如何做得最有效?

我现在在python做的事情是:

代码语言:javascript
运行
复制
for name in db.collection.distinct('name'):
    result[name]=db.collection.find({'name':name}).sort('updateTime',-1)[0]

是不是“发现”太多了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-28 05:25:40

MongoDB中,有一个使用$max操作符查找最大值的选项。

代码语言:javascript
运行
复制
db.collection.aggregate([
   {
      $group:{
         "_id":"$name",
         updateTime:{
            $max:"$updateTime"
         }
      }
   }
])

上面的查询在我的输出下面。

代码语言:javascript
运行
复制
{
    "_id" : "bob",
    "updateTime" : "2016-11-25"
}
{
    "_id" : "ada",
    "updateTime" : "2016-11-25"
}
票数 1
EN

Stack Overflow用户

发布于 2016-11-25 12:04:42

您可以使用聚合在单个查询中执行此操作:

代码语言:javascript
运行
复制
db.collection.aggregate([
   {
      $sort:{
         updateTime:-1
      }
   },
   {
      $group:{
         "_id":"$name",
         updateTime:{
            $first:"$updateTime"
         }
      }
   }
])

这个会回来的

代码语言:javascript
运行
复制
{ "_id" : "bob", "updateTime" : "2016-11-25" }
{ "_id" : "ada", "updateTime" : "2016-11-25" }

在线试用:mongoplayground.net.net/p/QZ01RSDneyR

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40804317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档