我正在努力用MongoEngine进行批量插入。我可以轻松地通过循环执行.save()来写入数据库,但是我无法从MongoEngine文档中找到执行批量插入的过程。唯一提及的是SO:multi document insert using mongoengine into mongodb。我尝试通过这种方式进行操作,但是我只是插入了所有文档而未在Schema中对其进行验证。
这是我的代码:
import mongoengine as me
# connect to MongoDB
me.connect(host='CONNECTION_STRING')
# venue Schema
class newVenues(me.Document):
name = me.StringField(required=True)
latitude = me.DecimalField(required=True)
longitude = me.DecimalField(required=True)
# some test data
venues = [{'name': 'Vega',
'latitude': 55.672867,
'longitude': 12.473692},
{'name': 'Tivoli',
'latitude': 55.681256,
'longitude': 12.553412}]
# the list of venues to bulk insert to MongoDB
venues_to_insert_list = []
for venue in venues:
venues_to_insert_list.append(
newVenues(
name=venue.get('name'),
latitude=venue.get('latitude'),
longitude=venue.get('longitude')
)
)
# bulk insert to MongoDB
newVenues.objects.insert(venues_to_insert_list)
如果要插入所有文档而不在架构中对其进行验证。您需要在mongoengine中创建动态文档
下面的代码用于读取csv文件,并在不验证模式的情况下将其插入mongodb的集合中[模式也是以动态方式进行的。]
import mongoengine as me
class DynamicDoc(me.DynamicDocument):
any_field = me.StringField()
import pandas as pd
all_csv_records = data_frame.to_dict('records')
data_frame = pd.read_csv(file_path)
for data in all_csv_records:
report_data = DynamicDoc()
DynamicDoc.any_field = str('temp_data')
for col, row in data.iteritems():
report_data[col] = row
report_data.save()
Note-仅mongo模型中的'any_field'是字符串形式的必需输入操作。因为字段在mongo模型中手动定义。