2017-04-30 6 views
0

データレコードをフィルタリングし、レコード番号を数えてソートする適切な方法は何ですか?私はほとんどの時間レコードを適切にフィルタリングし、mongoでカウントしソートする方法は?

私のソリューションは、
1で発生した10桁を選択する必要が

私は、データベース30,000の文書を持っているが、すべての文書は、{random_digit「数字」}と同じです。 、すべての数字のためにすべて発生した桁
2.を見つける見つけて発生した回数をカウントし、
3.ソートにリスト

def main(): 
    digits = [] 
    for d in table.find(): 
     n = d['digit'] 
     digits.append(n) 
    digits = set(digits) 

count_list = [] 
    for d in digits: 
     times = table.find({"digit": d}).count() 
     tmp = (times, d) 
     count_list.append(tmp) 
     top_list = heapq.nlargest(10, count_list) 

if __name__ == '__main__': 
    start = time.time() 
    main() 
    print('Cost: {}'.format(time.time() - start)) 
リストに保存します

5分かかります。
私はマルチスレッドも使用しようとしますが、結果は同じです。どんな助け?

答えて

0

3.4では、以下のアグリゲーションパイプラインを使用できます。

db.collection.aggregate([ { $sortByCount: "$digit" } ]) 

これは、それが動作

db.collection.aggregate( 
    { $group: { _id: "$digit", count: { $sum: 1 } } }, 
    { $sort: { count: -1 } } 
) 
+0

おかげで、同等です –

関連する問題