Kou*_*sik 6 python mongodb pymongo mongoengine python-3.x
MongoDB 和 PyMongo 都支持批量写入或一次插入多个文档。MongoDB:
db.collection_name.insertMany()
Run Code Online (Sandbox Code Playgroud)
皮蒙戈:
collection.insert([list_of_objects])
Run Code Online (Sandbox Code Playgroud)
但是出于同样的目的,我在 MongoEngine 中找不到任何类似的东西。有多种方法,但都一次插入一项。那么真的没有类似的东西吗?由于 mongoengine 是建立在 PyMongo 之上的。
我的要求是一次插入大量数据数据,但由于处理每个文档需要时间,因此我必须进行盲插入以提高性能。PyMongo 具有这样做的功能,因此如果 mongoengine 没有类似的东西,是否可以仅为此使用 mongoengine 的 pymongo 实例?
对于批量插入,您有 2 个选项:
1)派蒙哥
如果您的dict's 的格式与它们应该存储的形状完全一致,那么使用 pymongo,您将获得更好的性能,因为您将节省 ORM/ODM 库的开销(对象实例化、验证等)。
如评论中所述,您可以pymongo.Collection使用Model._get_collection().
附加值是性能,缺点是如果任何文档格式不正确(例如缺少字段、缺少默认值、错误类型、附加字段等),由于您绕过了 MongoEngine,它无论如何都会被插入。当您稍后通过模型与数据交互时,您可能会有惊喜。
2)蒙戈引擎
如果您有一组 Model 实例,则可以MongoEngine使用以下方法进行批量插入:
Model.objects.insert(your_array)
Run Code Online (Sandbox Code Playgroud)
如果你可以用 构造你的对象Model(**dict).save,那么这意味着你可以做
Model.objects.insert(your_array)
Run Code Online (Sandbox Code Playgroud)
优点是它保证您插入的文档格式对您的 MongoEngine 模型有效(在我的示例中,这意味着考虑age它不在字典中时的默认值)。缺点是存在性能成本。
简而言之,这完全取决于您的主要需求是性能还是您是否可以忍受 MongoEngine 的开销。
| 归档时间: |
|
| 查看次数: |
3134 次 |
| 最近记录: |