摄影:产品经理把豆腐切成猴头菇的神刀功
我们知道,使用 Pymongo 插入数据的时候,凑够一批数据,并调用insert_many()
批量插入,速度会远远超过一条一条插入。在默认情况下,我们只给这个方法传一个参数:包含字典的列表:
import pymongo handler = pymongo.MongoClient().example.col datas = [ {'name': 'kingname', 'salary': 99999999}, {'name': 'pm', 'salary': 8888888} ] handler.insert_many(datas)
此时,这个列表中的所有字典,会被按顺序一条一条插入到 MongoDB 的某个集合中。
实际上,如果你看 pymongo 的官方文档[1],你会发现 insert_many 还有几个默认参数:
其中参数 ordered 的作用是保证插入的顺序和列表中的字典顺序一致。如果列表中的某一个字典无法被插入,那么这个字典后面的所有数据都无法插入。
如果把 ordered 设置为 False,那么此时列表中的所有字典会被乱序插入,甚至还能够并行插入从而提高插入速度,其中一个字典有问题无法插入不会影响其它的字典,唯一的弊端就是插入到集合中的顺序可能与列表中的字典顺序不一致。
所以,如果你对插入的顺序不太在意,但对插入速度很敏感,那么你可以这样修改代码:
import pymongo handler = pymongo.MongoClient().example.col datas = [ {'name': 'kingname', 'salary': 99999999}, {'name': 'pm', 'salary': 8888888} ] handler.insert_many(datas, ordered=False)