2017-08-13 88 views
1

在使用MongoDB NodeJS驅動程序(甚至貓鼬)時,插入新文檔時,E11000錯誤可能會返回,表明發生重複鍵衝突。MongoDB NodeJS驅動程序:重複鍵'E11000`提取索引名稱

如果我所插入收集有多個唯一索引,我想,​​以確定它們中的哪一個被擊中(例如通知用戶,他的用戶名和/或電子郵件地址已經被拍攝的用戶)?

這與一個碰撞索引插入文件以後提出的錯誤:

{ 
    "name": "MongoError", 
    "message": "E11000 duplicate key error index: db.users.$_id_ dup key: { : \"blucell\" }", 
    "driver": true, 
    "index": 0, 
    "code": 11000, 
    "errmsg": "E11000 duplicate key error index: db.users.$_id_ dup key: { : \"blucell\" }" 
} 

引起問題的索引的唯一概念是消息,它隨時間變化(已蒙戈2之間不同英寸x和3.x)。

是否有更多的面向未來的/更容易檢查的哪個元素/索引造成衝突的方式是什麼?

+0

爲什麼你就不能查詢,例如db.users.find({_ id:「blucell」}),然後嘗試插入文檔?您可以爲所有唯一索引字段執行此操作,而不僅僅是_id。如果有匹配,您將知道不要插入文檔,並可以通知用戶名或電子郵件已被使用。 –

+0

是的,這是有效的,但它有很大的開銷,然後你必須照顧可能的數據競爭,這不會導致太多幹淨的代碼。我希望在那裏有更原生的解決方案 –

回答

1

不幸的是沒有方法的MongoDB 3.4.7列出一個單獨的碰撞指標,易於解析領域。

有貓鼬在這方面的討論,但解決方案都依賴於分析實際的錯誤信息(見https://github.com/Automattic/mongoose/issues/2129)。

由於節點驅動程序只報告服務器給出的錯誤,因此有一個關於該功能的MongoDB功能請求(請參閱SERVER-4637)。我建議對功能請求進行評論/提升以提高對問題的認識。

相關問題