2016-04-03 18 views
2

私は非常に大きなmongoデータベースコレクションを持っています。MongDb無効なデータを持つ要素を見つける方法

多くのタスクを持つ夜間ジョブには、1つのタスクがあります。

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と?

1つのアイデアは、BsonDocumentsとしてすべてを読み込み、マニュアルで手動で逆シリアル化することです。BsonSerializer.Deserialize<MyType>(doc);しかし、より良い方法がありますか?

更新 小さなテストツールを作成しましたが、例外はありませんでした。私は次のコードが特定のdomunentを壊したり投げるべきではないかと考えているときに間違いをしますか?それとも、一時的なバグであった可能性は高いですか?

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

データに関連していないことがわかりました。それはときには発生するいくつかの接続の問題に関連していました。

なぜこの例外が発生するのかわかりませんが、接続の問題を解決するとこのエラーが解決しました。

関連する問題