1 回答

TA貢獻1862條經(jīng)驗 獲得超7個贊
對于批量插入,您有 2 個選項:
1)皮蒙戈
如果您dict的 's 被格式化為應(yīng)該存儲的確切形狀,那么使用 pymongo,您將獲得更好的性能,因為您將節(jié)省 ORM/ODM 庫的開銷(對象實例化、驗證等)。
如評論中所述,您可以pymongo.Collection使用Model._get_collection().
附加值是性能,缺點是如果任何文檔格式不正確(例如缺少字段、缺少默認值、錯誤類型、附加字段等),由于您繞過 MongoEngine,它無論如何都會被插入。以后通過模型與數(shù)據(jù)交互時,您可能會感到驚訝。
2)蒙古引擎
如果您有一個模型實例數(shù)組,那么您可以MongoEngine使用以下方法進行批量插入:
Model.objects.insert(your_array)
如果你可以用 構(gòu)造你的對象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'}]
優(yōu)點是它保證您插入的文檔的格式對您的 MongoEngine 模型有效(在我的示例中,這意味著考慮到age它不在字典中時的默認值)。缺點是存在性能成本。
簡而言之,這完全取決于您的主要需求是性能還是您可以忍受 MongoEngine 的開銷。
添加回答
舉報