在mongodb中查找具有字段最大值的不同文档

cnu*_*cnu 3 mongodb pymongo

我在MongoDB中有成千上万的文档,其中一些示例如下:

{"title":"Foo", "hash": "1234567890abcedf", "num_sold": 49, 
"created": "2013-03-09 00:00:00"}

{"title":"Bar", "hash": "1234567890abcedf", "num_sold": 55, 
"created": "2013-03-11 00:00:00"}

{"title":"Baz", "hash": "1234567890abcedf", "num_sold": 55,
 "created": "2013-03-10 00:00:00"}

{"title":"Spam", "hash": "abcedef1234567890", "num_sold": 20,
 "created": "2013-03-11 00:00:00"}

{"title":"Eggs", "hash": "abc1234567890def", "num_sold": 20,
 "created": "2013-03-11 00:00:00"}
Run Code Online (Sandbox Code Playgroud)

是否可以选择hash具有最大值的不同文档,num_sold如果有多个文档具有相同num_sold的文档,请从该created字段中选择最新文档.

我使用PyMongo作为客户端.

Sam*_*aye 9

我不是Python专家所以我会用JavaScript编写.您可以使用与聚合框架做到这一点$sort,$group$firstopreators:

db.col.aggregate([
    {$sort: {created:-1}},
    {$group: {_id: '$hash', num_sold: {$first: '$num_sold'}, _id_seen: {$first: '$_id'}}}
])
Run Code Online (Sandbox Code Playgroud)

基本上我所做的是按创建的日期DESC对传入的文档进行排序,然后我对哈希进行分组,连接两个重复的哈希值,然后我得到排序组的第一个结果,它应该是最新的文档.

参考文献: