我有一个集合:
{'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':
{'name':'ada','updateTime':'2016-11-25'}
{'name':'bob','updateTime':'2016-11-25'}
...
或最终得到一个python dict:
{'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]
是否'找'过多次?
答案 0 :(得分:2)
您可以在聚合的单个查询中执行此操作:
db.collection.aggregate([
{
$sort:{
updateTime:-1
}
},
{
$group:{
"_id":"$name",
updateTime:{
$first:"$updateTime"
}
}
}
])
这将返回
{ "_id" : "bob", "updateTime" : "2016-11-25" }
{ "_id" : "ada", "updateTime" : "2016-11-25" }
答案 1 :(得分:0)
在 MongoDB 中,可以选择使用 $ max 运算符查找最大值。
db.collection.aggregate([
{
$group:{
"_id":"$name",
updateTime:{
$max:"$updateTime"
}
}
}
])
在我的输出下面有上面的查询。
{
"_id" : "bob",
"updateTime" : "2016-11-25"
}
{
"_id" : "ada",
"updateTime" : "2016-11-25"
}