MongDb如何查找包含无效数据的元素

时间:2016-04-03 20:03:24

标签: c# mongodb mongodb-query

我是一个非常大的mongo数据库集合。

现在一项有很多任务的夜间工作有一项任务可以在它上面运行。

代码与foreach一起运行,如下所示:

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

今天早上我得到了:

  

System.FormatException:反序列化时发生错误   类的Connections属性   SR.BusPortal.DomainModel.Search.StoredConnectionSet:发生错误   同时反序列化类的DeepLinkToken属性   SR.BusPortal.DomainModel.Search.StoredConnectionStep:无效   BsonType:34。

与错误相关的属性定义如下:

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

这个数组中是否有任何特殊字符串可能有问题?

现在如何找出哪个文档具有无效属性?它的价值是什么?有没有办法选择它?例如与mongo厨师或c#api?

一个想法是将所有内容都读为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;
            }
        })

1 个答案:

答案 0 :(得分:0)

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

不确定为什么它会以此异常结束,但解决连接问题可以解决此错误。