2013-04-21 108 views
3

我使用mongojs和Node.js的插入MongoDB中的文檔。 它是一個REST API,並且只有一個mongojs實例(使用本機驅動器)。每次都有一個api調用,SAME mongojs對象用於執行mongodb操作。現在,試圖插入文檔時出現以下錯誤。在INSERT:E11000重複鍵錯誤索引

{ 
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

'_id'必須在MongoDB中是獨一無二的。如果你有一個新的文檔,最簡單的方法就是不設置'_id'字段,並且驅動程序或數據庫會自動分配一個字段。無論哪種方式,它都是獨一無二的。 – WiredPrairie 2013-04-21 18:07:50

回答

1

我不知道它是否有權修正,但每次文檔被插入,我明確地創建一個新的對象ID而不是留命運MongoDB的驅動程序。我用下面的代碼

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

+0

這是您的問題的答案或有關您的問題的更多信息? – WiredPrairie 2013-04-21 18:06:38

+0

它也可以在這裏找到:'VAR ID =需要(「mongodb的」)對象ID()' – WiredPrairie 2013-04-21 18:15:42

+0

你創建一個新的?你看過什麼分配?你需要在這之前有一個「新」嗎? – 2013-04-22 03:06:27

0

這個問題似乎是這樣的一個的副本: 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被插入方法添加。由於doc在循環之外定義,每個隨後的一次通過循環使用爲_id的相同值。

解決方案:

  1. 刪除鍵_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) 
    
    相關問題