2013-10-28 109 views
3

我正在使用下面的代碼來使用C#驅動程序進行批量插入。我有一個唯一的索引,如果我嘗試插入一個不唯一的記錄,我希望它自動失敗。批量插入使用ContinueOnError

即使我有InsertFlags.ContinueOnError設置,我仍然收到InsertBatch調用錯誤。如果我吞下下面所示的錯誤,則一切正常。但是這當然感覺不對。

var mio = new MongoInsertOptions {Flags = InsertFlags.ContinueOnError}; 
// newImages is a list of POCO objects 
try 
{ 
    _db.GetCollection("Images").InsertBatch(newImages, mio); 
} 
catch (WriteConcernException) 
{   
} 
+0

這將有助於看到您的POCO聲明。可以在驅動程序階段引發異常(即,如果其中一個對象沒有序列化),並且只有在大量插入請求到達mongo數據庫本身時,纔會考慮'ContinueOnError'的WriteConcern。您也可以嘗試逐個迭代您的圖像,並查看是否以插入方式失敗。 –

+0

另外,您使用的是哪個版本的csharp驅動程序?我發現這個錯誤https://jira.mongodb.org/browse/CSHARP-674,如果它們有空值,可能會導致序列化失敗,這可能在到達數據庫之前觸發驅動程序異常。 –

+0

我正在執行一個非常簡單的實驗。我批量插入一組POCO對象,每個對象都有一個GUID。該集合在該GUID上具有唯一索引。第一次插入沒問題。我嘗試再次批量插入完全相同的一組POCO,並且我得到異常。我期望它忽略插入,並不會引發異常。 –

回答

1

您使用的是csharp Mongo驅動程序的1.8版本嗎?

如果是這樣,請嘗試升級到包含以下兩個問題的修復1.8.1版本:

所以你插入能成功,但由於上述錯誤,驅動程序仍然在批量插入操作上拋出異常。

而這個異常不是源於數據庫本身,解釋了爲什麼插入成功,但你仍然需要在事後捕獲異常 - 即db實際上是尊重你的ContinueOnError標誌,但驅動程序隨後拋出異常。