插入期间:E11000重复键错误索引

时间:2013-04-21 16:45:44

标签: javascript node.js mongodb

我正在使用mongojs和Node.js在mongodb中插入文档。 它是一个REST API,只有一个mongojs实例(使用本机驱动器)。每次都有一个api调用,SAME mongojs对象用于执行mongodb操作。现在,我在尝试插入文档时收到以下错误。

{
name: "MongoError"
err: "E11000 duplicate key error index: testdb.userComment.$_id_ dup key: { :    ObjectId('51727190bb4ab52a80024c09') }"
code: 11000
n: 0
connectionId: 225
ok: 1
}

该文件始终是唯一的 我试过db.userComment.getIndexs(),它显示索引在_id上。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我不确定它是否是正确的修复,但每次插入文档时,我都明确地创建一个新的ObjectID,而不是将命运留给mongodb驱动程序。我使用了以下代码

commentData._id = require('mongodb').BSONPure.ObjectID();

答案 1 :(得分:-1)

这个问题似乎与此问题重复: Getting "err" : "E11000 duplicate key error when inserting into mongo using the Java driver

我找到了答案on this page。我猜你的代码看起来像这样(大大简化了)?:

doc = {} 
for i in xrange(2): 
    doc['i'] = i 
    collection.insert(doc) 

问题是PyMongo在文档中注入_id字段,如果_id字段不存在,则在插入之前(_id始终生成客户端10gen司机)。这意味着第一次通过循环_id由insert方法添加。由于doc是在循环外定义的,因此每个后续循环都使用_id相同值。

解决方案:

  1. 删除键_id
  2. for i in xrange(2): 
        doc['i'] = i 
        if '_id' in doc: 
            del doc['_id'] 
        collection.insert(doc)
    
    1. 或手动创建一个新的:
    2. from bson.objectid import ObjectId 
      for i in xrange(2): 
          doc['i'] = i 
          doc['_id'] = ObjectId() 
          collection.insert(doc)