python - mongodb如何获取每个 "group with the same key"的最大值

标签 python mongodb mongodb-query aggregation-framework

我有一个收藏:

{'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”的最大值:

{'name':'ada','updateTime':'2016-11-25'}
{'name':'bob','updateTime':'2016-11-25'}
...

或者最终得到一个Python字典:

{'ada':'2016-11-25','bob':'2016-11-25',...}

如何做到最有效?

我现在用 python 做的是:

for name in db.collection.distinct('name'):
    result[name]=db.collection.find({'name':name}).sort('updateTime',-1)[0]

是否“查找”了太多次?

最佳答案

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

db.collection.aggregate([
   {
      $sort:{
         updateTime:-1
      }
   },
   {
      $group:{
         "_id":"$name",
         updateTime:{
            $first:"$updateTime"
         }
      }
   }
])

这将返回

{ "_id" : "bob", "updateTime" : "2016-11-25" }
{ "_id" : "ada", "updateTime" : "2016-11-25" }

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

关于python - mongodb如何获取每个 "group with the same key"的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40804317/

相关文章:

MongoDB - 将简单字段更改为对象

mongodb - 按字段/键名称对 MongoDB 文档进行排序

python - 可通过属性名称或索引选项访问的结构

python - 在 python 脚本中自动输入终端命令的答案

python - Django测试使用Selenium包报错

node.js - MongoDB 使用聚合 $lookup 或 Node.js 中的 populate 连接两个集合

python - 从 Python3 中的文件名列表中查找文件的绝对路径

javascript - 通过mongoose访问数组元素

javascript - MongoDB Node.js 脚本实现

mongodb - mongodb默认连接特定数据库