1 回答

TA贡献1862条经验 获得超7个赞
对于批量插入,您有 2 个选项:
1)皮蒙戈
如果您dict的 's 被格式化为应该存储的确切形状,那么使用 pymongo,您将获得更好的性能,因为您将节省 ORM/ODM 库的开销(对象实例化、验证等)。
如评论中所述,您可以pymongo.Collection使用Model._get_collection().
附加值是性能,缺点是如果任何文档格式不正确(例如缺少字段、缺少默认值、错误类型、附加字段等),由于您绕过 MongoEngine,它无论如何都会被插入。以后通过模型与数据交互时,您可能会感到惊讶。
2)蒙古引擎
如果您有一个模型实例数组,那么您可以MongoEngine使用以下方法进行批量插入:
Model.objects.insert(your_array)
如果你可以用 构造你的对象Model(**dict).save,那么这意味着你可以做
class Person(Document):
name = StringField()
age = IntField(default=32)
array = [{'name': 'John'}, {'name': 'Hulk', 'age': 100}]
person_instances = [Person(**data) for data in array]
Person.objects.insert(person_instances, load_bulk=False)
# Would insert the following
#[{'_id': ObjectId('...'), 'age': 32, 'name': 'John'},
# {'_id': ObjectId('...'), 'age': 100, 'name': 'Hulk'}]
优点是它保证您插入的文档的格式对您的 MongoEngine 模型有效(在我的示例中,这意味着考虑到age它不在字典中时的默认值)。缺点是存在性能成本。
简而言之,这完全取决于您的主要需求是性能还是您可以忍受 MongoEngine 的开销。
添加回答
举报