三萬個資料, 每個資料只包含一個隨機數 {"digit": 隨機數}
要求: 統計出現最多次數的數字
資料庫表 table
def main():
digits = []
for d in table.find():
n = d['digit']
digits.append(n)
dig = set(digits)
news = []
i = 0
for d in dig:
c = table.find({"digit": d}).count()
zz = (d, c)
news.append(zz)
print(i)
i += 1
if __name__ == '__main__':
start = time.time()
main()
print('Cost: {}'.format(time.time() - start))
運行一次需要五六分鐘吧, 用多線程開100也快不了多少, 風扇還特響...
請問正確姿勢是怎樣的
正確的姿勢是使用aggregation.
$group的使用者可以參考文件。
要注意的是,這樣的需求現實當中出現的可能性不高,估計你這是一道練習題目。實際上就算使用了Aggregatoin,仍然需要遍歷整個集合的所有數據才有可能找出出現最多的數字,所以當集合總記錄數比較大的時候,這樣的全表遍歷操作怎麼樣都不可能會快,通常只有在OLAP場景下才有這樣的查法,而OLAP通常對速度要求不高。所以僅從理論上討論,應該使用aggregation framework,但真實需求還是需要再做具體分析。