PyMongo / MongoDB insert_many 是事务性的吗?

is PyMongo / MongoDB insert_many transactional?

为了提高上传速度,我有一个多处理 Python 程序,可以将 CSV 分成许多部分,并在不同的进程中上传每个部分。同样为了速度,我将 3000 个插入一起放入每个 insert_many.

诀窍是我在某些行中有一些错误数据,我还没有弄清楚它在哪里。所以我所做的是 Try/Except 围绕 insert_many,然后我尝试再次插入 3000 个文档,但一次一个,在另一个 Try/Except 中。然后我可以只对有错误的行执行 pprint.pprint。

但是,我想知道当 3000 个文档因为错误而失败时,例如在第 1000 行中,是否整个 3000 个都失败?或者是否存储了前 999 行而其余行失败了?还是存储了 2999 行,只有一个坏数据行失败?

当您通过批量写入进行插入时,您可以设置 ordered 选项。

当 ordered 为真时,插入在第一个错误处停止。

当 ordered 为 false 时,插入会继续经过由于任何原因失败的每个文档。

在任何一种情况下,批量写入都不是事务性的,因为失败不会删除任何先前执行的写入(插入或其他)。

如果您想要交易,MongoDB 将这些作为显式功能提供。