2013-05-22 127 views
0

如果兩個客戶端使用一個MongoDB實例在沒有«forceServerObjectId:true»的情況下同時執行和插入操作,會發生什麼?是否有可能生成相同的ObjectIDs,是否可能存在衝突?並行插入到MongoDB中

回答

1

在每個集合的_id字段上都有一個隱含的唯一索引,這使得具有相同_id的兩個對象不可能存在於同一個集合中。

當兩個具有相同_id值的對象與collection.save一起存儲時,一個文檔將替換另一個。

將它們與collection.insert一起存儲時,其中一個插入操作將失敗並出現重複鍵錯誤。

但請注意,MongoDB ObjectIDs包括一個24位機器ID。這使得兩個客戶機不可能生成相同的ID,除非它們具有相同的機器ID。即使這樣也不太可能。當然,這隻適用於讓MongoDB驅動程序(或shell)自動生成ObjectID的情況。當您手動設置時,MongoDB允許使用任何類型的任何值作爲_id字段的值。當你這樣做時(你不應該),確保唯一性是你的責任。