我想避免创建重复的文档,因此在搜索如何执行此操作时,我发现的第一个解决方案是以下答案:
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 没有办法"抑制"错误 - 你需要自己处理它们。