Drei?igtausend Daten, jedes Datenelement enth?lt nur eine Zufallszahl {?Ziffer“: Zufallszahl}
Anforderung: Z?hlen Sie die Zahl, die am h?ufigsten vorkommt
Datenbanktabelle
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))
Es dauert fünf oder sechs Minuten, um 100 Mal zu laufen. Der Lüfter ist auch sehr laut ...
Was ist die richtige Haltung?
學習是最好的投資!
正確的姿勢是使用aggregation.
db.table.aggregate([
{$group: {_id: "$digit", count: {$sum: 1}}}, // 統(tǒng)計每個數字出現的次數
{$sort: {count: -1}}, // 逆序排列
{$limit: 1} // 取第1條記錄
]);
$group的用戶可以參考文檔。
需要注意的是,這樣的需求現實當中出現的可能性不高,估計你這是一道練習題目。實際上就算使用了Aggregatoin,仍然需要遍歷整個集合的所有數據才有可能找出出現最多的數字,所以當集合總記錄數比較大的時候,這樣的全表遍歷操作怎么樣都不可能會快,通常也只有在OLAP場景下才有這樣的查法,而OLAP通常對速度要求不高。所以僅從理論上討論,應該使用aggregation framework,但是真實需求還是需要再做具體分析。