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.
$group的用户可以参考文档。
需要注意的是,这样的需求现实当中出现的可能性不高,估计你这是一道练习题目。实际上就算使用了Aggregatoin,仍然需要遍历整个集合的所有数据才有可能找出出现最多的数字,所以当集合总记录数比较大的时候,这样的全表遍历操作怎么样都不可能会快,通常也只有在OLAP场景下才有这样的查法,而OLAP通常对速度要求不高。所以仅从理论上讨论,应该使用aggregation framework,但是真实需求还是需要再做具体分析。