MongoDB插入多个文件,其中可以复制_id

时间:2014-03-30 13:29:56

标签: javascript performance mongodb error-handling

我正在使用以下内容将一个对象数组插入一个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仍然会在此数组中插入剩余的对象吗?我真的不介意错误,如果它不会阻止插入不重复的剩余文件或对其他任何负面影响。

或者,在发送对象数组之前,我是否应该逐字地查询每个对象的数据库以查看它是否存在?我认为这样做对性能来说不是最好的。

我只想弄清楚处理这些重复项的最有效方法。

2 个答案:

答案 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,系统会为你生成一个。

相关问题