我在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用于客户端。
答案 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对传入的文档进行排序,然后我对哈希进行分组,连接两个重复的哈希值,然后得到排序组的第一个结果,这应该是最新的文档。
参考文献: