我有一个收藏品:
{'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'}
...
或者最终得到一条蟒蛇的字典:
{'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]
是不是“发现”太多了?
发布于 2016-11-28 05:25:40
在MongoDB中,有一个使用$max操作符查找最大值的选项。
db.collection.aggregate([
{
$group:{
"_id":"$name",
updateTime:{
$max:"$updateTime"
}
}
}
])
上面的查询在我的输出下面。
{
"_id" : "bob",
"updateTime" : "2016-11-25"
}
{
"_id" : "ada",
"updateTime" : "2016-11-25"
}
发布于 2016-11-25 12:04:42
您可以使用聚合在单个查询中执行此操作:
db.collection.aggregate([
{
$sort:{
updateTime:-1
}
},
{
$group:{
"_id":"$name",
updateTime:{
$first:"$updateTime"
}
}
}
])
这个会回来的
{ "_id" : "bob", "updateTime" : "2016-11-25" }
{ "_id" : "ada", "updateTime" : "2016-11-25" }
https://stackoverflow.com/questions/40804317
复制相似问题