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

我发现它与数据无关。这与有时出现的一些连接问题有关。

不知道为什么它以这个异常结束,但解决连接问题解决了这个错误。

相关问题