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

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で並べ替えてから、ハッシュでグループ化し、2つの重複するハッシュを連結します。次に、並べ替えられたグループの最初の結果を取得します。これは最新のドキュメントである必要があります。

参照:

于 2013-03-11T08:55:35.070 に答える