3

我在 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"}

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

我使用 PyMongo 作为客户端。

4

1 回答 1

9

我不是 Python 专家,所以我会用 JavaScript 写这个。您可以使用$sort,$group$first运算符在聚合框架中执行此操作:

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

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

参考:

于 2013-03-11T08:55:35.070 回答