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

时间:2013-03-11 08:51:18

标签: 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"}

是否可以选择具有最大hash的不同num_sold的所有文档,如果有多个文档具有相同的num_sold,请从{选择最新文档{1}}字段。

我将PyMongo用于客户端。

1 个答案:

答案 0 :(得分:8)

我不是Python专家所以我会用JavaScript编写。您可以使用$sort$group$first opreator通过聚合框架执行此操作:

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

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

参考文献: