我正在使用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上。任何人都可以帮我解决这个问题吗?
答案 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
的相同值。
解决方案:
for i in xrange(2): doc['i'] = i if '_id' in doc: del doc['_id'] collection.insert(doc)
from bson.objectid import ObjectId for i in xrange(2): doc['i'] = i doc['_id'] = ObjectId() collection.insert(doc)