2016-04-12 32 views
3

PyMongoクエリからの結果:ソート次のように私はMongoDBのクエリを持って

次のような出力になり
data = db.collection.aggregate([{"$match":{"created_at":{"$gte":start,"$lt":end}}},{"$group":{"_id":"$stage","count":{"$sum":1}}},{"$match":{"count":{"$gt":m{u'count': 296, u'_id': u'10.57.72.93'} 

{u'count': 230, u'_id': u'111.11.111.111'} 
{u'count': 2240, u'_id': u'111.11.11.11'} 

I「の数によって出力をソートしようとしています「コラム:

data.sort('count', pymongo.DESCENDING) 

...しかし、私は次のエラーを取得しています:

'CommandCursor' object has no attribute 'sort' 

誰でもこのエラーの理由を説明できますか? Aggregation exampleに示すよう$sortを使用して

答えて

5

from bson.son import SON 

data = db.collection.aggregate([ 
    {"$match":{"created_at":{"$gte":start,"$lt":end}}}, 
    {"$group":{"_id":"$stage","count":{"$sum":1}}}, 
    {"$match":{"count": ... }}, 
    {"$sort": SON([("count", -1)])} # <--- 
]) 

代替一般的な解決策:カスタムキー機能をsortedを使用します。

data = db.collection.aggregate(...) 
data = sorted(data, key=lambda x: x['count'], reverse=True) 
+0

「SON」という名前は定義されていませんが、別の方法では完璧に動作します。 – Prakash

+0

@Prakash、コードの最初の行に示すようにインポートしましたか? – falsetru

+0

ありがとうございましたが、これもうまくいきました:{"$ sort":{"count":-1}} - それらの間に違いはありますか? – Prakash

0

あなたは$sortを使用することをお勧めします。 Mongo docsもチェックしてください。

0

アグリゲーションパイプラインは$sortパイプラインステージを有する:

data = db.collection.aggregate([ 
    { "$match":{"created_at":{"$gte":start,"$lt":end} }}, 
    { "$group":{ "_id":"$stage","count":{"$sum":1} }}, 
    { "$match":{ 
     "count":{ "$gt": 296 } # query trimmed because your question listing is incomplete 
    }}, 
    { "$sort": { "count": -1 } } # Actual sort stage 
]) 

.sort()方法集約パイプラインは何異なっている「カーソル」のためのものです。