2014-11-03 64 views
2

假設「doc」是我想要插入到MongoDB集合中的一些文檔,「collection」是我將文檔插入到的集合。檢查插入是否成功(MongoDB C#驅動程序)

我有類似如下:

try 
{ 
    WriteConcern wc = new WriteConcern(); 
    wc.W = 1; 
    wc.Journal = true; 

    WriteConcernResult wcResult = collection.Insert(doc, wc); 

    if (!string.IsNullOrWhiteSpace(wcResult.ErrorMessage) || !wcResult.Ok) 
    { 
     return ErrorHandler(...); 
    } 
    else 
    { 
     return SuccessFunction(...); 
    } 
} 
catch (Exception e) 
{ 
    return e.Message; 
} 

基本上,如果插入任何原因而失敗(硬件等不能正常工作),我想處理它(通過的ErrorHandler功能或catch子句),如果成功,我想調用SuccessFunction。

我的問題:上述代碼是否足以用於錯誤檢查目的?換句話說,所有失敗的插入都會被捕獲,所以在這些情況下SuccessFunction永遠不會被調用?

回答

7

你甚至不需要做任何檢查。如果在使用除未確認之外的任何寫入關注點時寫入不成功,則collection.Insert將引發異常。

如果您想知道是否發生錯誤,您需要捕獲WriteConcernException。

+0

這是否也適用於多文檔操作?因此,如果我插入或更新多個文檔,但其中一些插入/更新失敗,是否會引發該異常? – CynicalProgrammer 2014-11-03 17:27:44

+1

如果指定了writeconcern,則會發生第一個錯誤,並且不會插入其他文檔將引發異常。如果你已經指定了continueOnError = true,那麼你最終會得到1個異常。 – 2014-11-03 18:10:08

+0

謝謝!我還有一個問題:WriteConcernException是否也與Fin​​dAndModifyResult一起工作,或者只是WriteConcernResult?如果沒有,是否有FindAndModifyResult的等價物,或者我應該檢查結果是否爲空? – CynicalProgrammer 2014-11-03 19:05:07

相關問題