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,因此没有重复的键错误抛出。