2016-04-03 49 views
2

我有一個非常大的mongo數據庫集合。MongDb如何查找包含無效數據的元素

現在每晚有很多任務的工作都有一個任務來運行它。今天早晨我感到

var sets = Collection.FindAll(); 
await sets.ForEachAsync(handler) 

現在:

System.FormatException:反序列化 類的 連接屬性發生錯誤

的代碼,像這樣一個foreach在它運行SR.BusPortal.DomainModel.Search.StoredConnectionSet:發生錯誤 反序列化類 的DeepLinkToken屬性SR.BusPortal.DomainModel.Search.StoredConnectionStep:Inval ID BsonType:34

財產上的錯誤與定義是這樣的:

[IgnoreNull] 
[DataMember(Order = 1390, Name = "lt")] 
public string[] DeepLinkToken { get; set; } 

是否有任何特殊字符串這可能是這個數組中有問題?

現在我怎樣才能找出哪個文件有無效的屬性?它的價值是什麼?有沒有辦法選擇它?例如與mongo廚師或C#API?

一個想法是將全部讀爲BsonDocuments,然後手動將其手動反序列化爲BsonSerializer.Deserialize<MyType>(doc);。但是有更好的方法嗎?

更新 我創建了一個小測試工具,但我沒有得到任何異常。當我認爲下面的代碼應該打破/拋出特定的命令時,我犯了一個錯誤嗎?或者它更可能只是一個臨時性的錯誤?

source.FindAll(options).ForEachAsync((doc, pos) => 
     { 
      try 
      { 
       var element = BsonSerializer.Deserialize<StoredConnectionSet>(doc); 
      } 
      catch(Exception err) 
      { 
       if(Debugger.IsAttached) // I run in debug with an attached VS debugger 
       { 
        Debugger.Break(); 
       } 

       Console.WriteLine(err); 
       throw; 
      } 
     }) 

回答

0

我發現它與數據無關。這與有時出現的一些連接問題有關。

不知道爲什麼它以這個異常結束,但解決連接問題解決了這個錯誤。

相關問題