私は非常に大きな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;
}
})