3

我正在使用 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 上。谁能帮我解决这个问题?

4

2 回答 2

1

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

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

于 2013-04-21T16:58:36.123 回答
-1

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

我在这个页面上找到了答案。我猜你的代码看起来像这样(非常简化)?:

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

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

解决方案:

  1. 删除键_id
for i in xrange(2): 
    doc['i'] = i 
    if '_id' in doc: 
        del doc['_id'] 
    collection.insert(doc)
  1. 或者手动创建一个新的:
from bson.objectid import ObjectId 
for i in xrange(2): 
    doc['i'] = i 
    doc['_id'] = ObjectId() 
    collection.insert(doc)
于 2017-04-24T10:09:20.723 回答