MongoDB批量插入忽略重复

我search了谷歌,并找不到关于如何忽略使用批量插入时重复错误的任何可靠的信息。

这是我目前使用的代码:

MongoClient.connect(mongoURL, function(err, db) { if(err) console.err(err) let col = db.collection('user_ids') let batch = col.initializeUnorderedBulkOp() ids.forEach(function(id) { batch.insert({ userid: id, used: false, group: argv.groupID }) }) batch.execute(function(err, result) { if(err) { console.error(new Error(err)) db.close() } // Do some work db.close() }) }) 

可能吗? 我已经尝试将{continueOnError: true, safe: true}bulk.insert(...)但没有奏效。

有任何想法吗?

另一种方法是使用bulk.find().upsert().replaceOne()来代替:

 MongoClient.connect(mongoURL, function(err, db) { if(err) console.err(err) let col = db.collection('user_ids') let batch = col.initializeUnorderedBulkOp() ids.forEach(function(id) { batch.find({ userid: id }).upsert().replaceOne({ userid: id, used: false, group: argv.groupID }); }); batch.execute(function(err, result) { if(err) { console.error(new Error(err)) db.close() } // Do some work db.close() }); }); 

有了上面的内容,如果一个文档匹配查询{ userid: id } ,它将被replace为新的文档,否则将被创build,因此没有重复的键错误抛出。