Mongo 像 insertMany 这样的批量操作会部分失败吗?

Can Mongo Bulk Operations like insertMany Partially Fail?

在网上搜索文档和帖子后,有一件事情我一直不清楚 Mongo。

当您尝试将文档批量写入如下例所示的集合时,您是否有可能获得 一些 成功写入的文档,但有些却没有't?

db.products.insertMany( [
  { item: "card", qty: 15 },
  { item: "envelope", qty: 20 },
  { item: "stamps" , qty: 30 }
] );

换句话说,您是否遇到过为 cardenvelope 项目创建文档的情况,但是 邮票 项目?

我正在努力提高我公司某些流程的性能,我的团队中存在一些争论,即批量插入或更新会真正引起什么样的错误场景,所以如果有人有明确的答案,那太棒了。我知道通常 mongo 查询不是事务性的,除非您明确说明,但这是一个不清楚的领域。

看看这个例子:

db.products.insertMany([
   { _id: 1, item: "card", qty: 15 },
   { _id: 2, item: "envelope", qty: 20 },
   { _id: 1, item: "stamps", qty: 30 }
]);


uncaught exception: BulkWriteError({
    "writeErrors" : [
        {
            "index" : 2,
            "code" : 11000,
            "errmsg" : "E11000 duplicate key error collection: so.products index: _id_ dup key: { _id: 1.0 }",
            "op" : {
                "_id" : 1,
                "item" : "stamps",
                "qty" : 30
            }
        },
    ],
    "writeConcernErrors" : [ ],
    "nInserted" : 2,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
}) :

行为应该是显而易见的。请注意,默认情况下,文档的插入顺序与命令中的顺序相同,除非您指定选项 ordered: false