更新:這個問題被問及MongoDB 1.8.x和接受的解決方案屬於1.8。但是請注意,Mongo 2.x對錯誤消息進行了更改,以便您可以確定哪些字段會在更新以及插入時生成錯誤(請參閱下面的Kyle和Remon的評論)。MongoDB唯一索引錯誤:如何知道哪個字段產生錯誤?
有沒有一種方法來嘗試蒙戈UPSERT,如果有一個唯一索引衝突,知道哪些領域導致了問題 - 在一個數據庫操作?
例如,假設我有一個customers
集合_id
和name
屬性。另外,假設unique index存在name
以確保沒有兩個customer
文檔具有相同的name
。
目前,我做數據庫操作執行UPSERT:
- 查詢
customers
,看是否有文件已經與我正要插入/更新的名稱存在。 - 如果不存在衝突,請執行upsert。
我希望能夠在單個操作中做到這一點,並且如果出現錯誤,請知道哪個字段導致問題。
如果操作是創建一個新文檔,這是可能的。 Mongo返回錯誤E11000 duplicate key error index: {index name}
。這有點破解,但我可以使用正則表達式來解析索引名稱(在我的情況下,其中包含字段名稱)。
但是,當更新文檔時,錯誤消息中沒有關於索引或字段的信息。這只是「E11001 duplicate key on update
」。
有沒有其他人有關於聰明的方法來做upserts的建議,並知道哪些字段導致獨特的索引問題,如果有必要?希望避免server-side stored JavaScript functions ...
您正在運行哪個版本的MongoDB?這似乎在2.0.1中得到了修復。 –
它是。我剛剛測試了它,並在upsert中給出了違規索引 –
我正在使用1.8.x,但在2.x中瞭解這一更改非常好。感謝@KyleBanker和@RemonvanVliet! –