【Python】MongoDB中的批量写入案例,避免单条插入失败导致整体失败


当看尽潮起潮落

只要你记得我

你曾说过 会永远爱我

也许承诺 不过证明没把握

不用难过 不用掩饰什么

当结果是那么赤裸裸

其实不必说什么 才能离开我

起码那些经过属于我

🎵 莫文蔚《盛夏的果实》


MongoDB是一个功能强大的NoSQL数据库,广泛用于处理大规模数据集、实时分析和高性能应用程序。在进行数据插入时,MongoDB提供了insertMany()方法,允许用户一次性批量插入多个文档。理解insertMany()及其ordered选项对于优化数据插入流程和错误处理非常关键。

insertMany()方法概述

insertMany()方法允许向指定集合中一次性插入多个文档。这种方法比单个文档插入效率更高,特别适用于需要快速导入大量数据的场景。该方法的基本语法如下:

python 复制代码
db.collection.insertMany(
   [ <document1>, <document2>, ... ],
   { ordered: <boolean> }
)
  • , , ...:要插入的文档数组。
  • ordered:控制插入操作的执行方式,为true时(默认值),如果插入某个文档失败,则停止后续所有文档的插入;为false时,即使某些文档插入失败,仍继续尝试插入其他文档。

ordered=False的应用场景

将ordered设置为false可以提高插入操作的健壮性和效率,特别是在处理大数据批量时。这样,单个文档的插入失败不会影响到整个批量操作,使得数据导入过程更加平滑。

Python示例

以下是一个使用Python和PyMongo库进行insertMany()操作,并设置ordered=False的示例。假设我们有一个MongoDB集合名为users,我们需要插入多个用户信息。

首先,确保已安装PyMongo库:

bash 复制代码
pip install pymongo

接下来是Python脚本:

python 复制代码
from pymongo import MongoClient
from pymongo.errors import BulkWriteError

# 创建MongoDB客户端
client = MongoClient('mongodb://localhost:27017/')

# 选择数据库和集合
db = client['mydatabase']
collection = db['users']

# 准备要插入的文档列表
documents = [
    {"_id": 1, "name": "John Doe", "age": 30},
    {"_id": 1, "name": "Jane Doe", "age": 25},  # 这里故意使用重复的_id,将导致错误
    {"_id": 2, "name": "Jake Doe", "age": 22}
]

# 尝试插入文档
try:
    result = collection.insertMany(documents, ordered=False)
    print(f"Successfully inserted {len(result.inserted_ids)} documents.")
except BulkWriteError as e:
    print("Error occurred:", e.details)
    print("Documents inserted up to the error:", e.details['nInserted'])

分析

在这个脚本中:

我们连接到本地MongoDB实例。

选择了名为mydatabase的数据库和users集合。

准备了一个文档列表,并尝试插入。注意,列表中有意包含了一个会引起插入错误的重复_id。

使用insertMany时设置ordered=False,这意味着即使中间某个文档插入失败,操作也会尝试继续插入其他文档。

如果操作中发生错误,我们捕获·BulkWriteError·,并从中获取失败的详细信息以及成功插入的文档数量。

结论

使用ordered=False在进行批量插入操作时可以提高效率并增强错误容忍性,非常适合大规模数据处理场景。通过上述Python示例,您可以了解如何在实际应用中使用这一特性来优化MongoDB的数据插入

相关推荐
databook6 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar8 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780518 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_8 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机15 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
似水流年流不尽思念15 小时前
MongoDB 有哪些索引?适用场景?
后端·mongodb
数据智能老司机16 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机16 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机16 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i16 小时前
drf初步梳理
python·django