有没有办法在 mongodb 中让 insertOne 无法创建重复的索引文档而不会引发错误?



我想避免创建重复的文档,因此在搜索如何执行此操作时,我发现的第一个解决方案是以下答案:

db.collection.update(doc, doc, {upsert:true})

但这与insertOne相比真的很慢,所以我看了看第二个答案:

db.collection.createIndex( { propertyName: 1 }, {unique:true} )

就性能而言,这似乎是一种更好的解决方案,但问题不仅在于不插入重复项,还抛出错误:

(node:97200) UnhandledPromiseRejectionWarning: MongoError: E11000 duplicate key error collection: main.dir index: path_1 dup key: { propertyName: "propertyName123" }

是否有设置可以使其不会引发错误,或者我是否需要在此处使用 try catch?

我认为这是不可能的 - 如果你看一下NodeJS MongoDB驱动程序源代码,你可以看到insertOne使用底层方法executeOperation

此方法在语句的实际执行周围有一个 try catch,并重新抛出可能发生的任何错误,如下所示。所以 afaik 没有办法"抑制"错误 - 你需要自己处理它们。

最新更新