mongodb 如何在bulkWrite引发错误时获得正确的mongo bulkWrite结果

ulydmbyx  于 2023-01-12  发布在  Go
关注(0)|答案(1)|浏览(166)

当bulkWrite抛出错误时,是否有办法获得mongoose bulkWrite结果?
我在网上搜索了好几天,我所能找到的就是解决办法是设置{ordered: false}但这并没有解决任何问题。
例如,我有一个如下所示的bulkWrite:

try {
        let data = [{ ...some_data}, { ...some_data}, {...some_data}]

    let updateOps = data.map((item) => {
        return {
             updateOne: {
                     filter: { some_field: item.some_field },
                     update: item,
                     upsert: true,
                      },
                }
            })

        const result = await model.bulkWrite(updateOps, { ordered: false } )

} catch (e) {

    ... do something with error

}

如果一切顺利,结果我得到nModified,nUpserted等像 Mongoose 文档。
但是,如果例如bulkWrite在第二次更新后抛出错误,它将转到catch块,我永远无法实际看到更新结果,或获得在抛出错误前更新的项目计数。
是否有任何解决方案可以在出错后继续bulkWrite,或者至少可以获取有关在导致错误之前修改或更新的文档的信息?

ykejflvf

ykejflvf1#

试试这个:

const bulkWriteOps = data.map((item) => {
    return {
        updateOne: {
            filter: { some_field: item.some_field },
            update: item,
            upsert: true
        }
    };
});

let bulkWritePromise = model.bulkWrite(bulkWriteOps, { ordered: false }).execute();

bulkWritePromise
    .then((result) => {
})
.catch((error) => {
  console.log(error, "Error")
 });

相关问题