我有一个收藏:
{'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" }
关于python - mongodb如何获取每个 "group with the same key"的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40804317/