我正在使用以下内容将一个对象数组插入一个MongoDB(我正在分配一个唯一的_id),这是有效的:
collection.insert(records, {w:1}, function(err, result)
某些记录可能有重复的_id(意味着该记录已经在数据库中)。这是我得到的错误:
MongoError: E11000 duplicate key error index: heroku_app23495772.records.$_id_ dup key: { : "2b09aadb900f0e5112b6d03f665fb946" }
即使遇到第一个对象(重复)上的错误,mongoDB仍然会在此数组中插入剩余的对象吗?我真的不介意错误,如果它不会阻止插入不重复的剩余文件或对其他任何负面影响。
或者,在发送对象数组之前,我是否应该逐字地查询每个对象的数据库以查看它是否存在?我认为这样做对性能来说不是最好的。
我只想弄清楚处理这些重复项的最有效方法。
答案 0 :(得分:5)
好的,我终于开始工作了。包括continueOnError: true
将继续插入批次的其余部分,即使某些未插入因为它们是重复的。
collection.insert(records, {continueOnError: true}, function(err, result) {
答案 1 :(得分:0)
_id 在集合中必须是唯一的,因此您无法插入具有相同_id的2个文档。
不确定您的确切用例是什么,但您有另一种方法,例如进行upsert或保存。
如果您进行了collection.save,则会替换该文档: http://docs.mongodb.org/manual/reference/method/db.collection.save/
如果您使用upsert执行更新:true,您可以控制需要更新或创建的内容: http://docs.mongodb.org/manual/reference/method/db.collection.update/#insert-a-new-document-if-no-match-exists-upsert
如果这没有用,你能否告诉我们你想要达到的确切用例,并记住,如果你不提供任何_id,系统会为你生成一个。