我正在使用MongoDB C#驱动程序.我有BsonDocument一些数据,其中包括一些特定于MongoDB的类型(如ObjectID和ISODates).我想将其转换为有效的通用JSON字符串.换句话说,我不可能有这样的事情_id: ObjectId(...)还是date: ISODate(...)而是宁愿_id: "..."和date: "...".基本上,我想将只有MongoDB识别的特殊类型转换为常规字符串,以便更容易地解析它们.问题是内置函数.ToJson()(其他StackOverflow答案建议)并没有真正将文档转换为有效的JSON,因为它维护了这些特殊类型.我的文档还包含许多级别的数组和子文档,因此简单的for循环是不够的.转换BsonDocument它的最佳方法是什么来避免这个问题?我更喜欢内置的东西而不是手动递归文档来修复所有问题.
我一直在阅读MongoDB中的Write Concern.我知道有几个级别决定了写操作成功的保证级别,并且设置此级别的性能越高,性能权衡越大.但是,我正在C#环境中工作,我正在尝试弄清楚如何在那里使用Write Concern以及哪些级别对某些情况最有效.我已经想出如何使用WriteConcernResult对象收集检查结果,我主要对关卡本身感兴趣.
这些是我的问题:
如何在C#中为特定写入设置写入关注级别?
这个答案建议使用连接字符串,但这看起来像一个全局设置,我不想要,因为我将使用的一些写操作比其他更"重要",我不想杀死性能.我注意到有一个WriteConcern类,但文档中没有详细介绍它的使用(它在文档中的MongoDB.Driver命名空间下).
特别是,如何将其设置为"Journaled"或"Replica Acknowledged",默认情况下它是"已确认"?
对于每个级别,哪些类型的问题可以通过Write Concern检查?
例如:系统崩溃,电源故障,网络连接问题,等我的东西通过偷渡特别感兴趣,是不容易发现,因为停电等等是非常明显的,我们可以估算,其中操作可能已失败的时间间隔并做出相应的反应
我之前看过这个问题,但答案很模糊.我一直在对oplog进行一些研究,并试图准确理解它是如何工作的.特别是,我希望能够很好地理解oplog文档中的字段以及它们存储的数据.
这些是我通过测试找到的领域,我认为它们的意思以及我仍然不确定的内容:
我想确认我上面提出的观点是否准确,以及对不明确的位的澄清.我也有兴趣知道是否有任何其他字段可以出现在oplog文档中.
假设"doc"是我要插入MongoDB集合的一些文档,"collection"是我将文档插入的集合.
我有以下内容:
try
{
WriteConcern wc = new WriteConcern();
wc.W = 1;
wc.Journal = true;
WriteConcernResult wcResult = collection.Insert(doc, wc);
if (!string.IsNullOrWhiteSpace(wcResult.ErrorMessage) || !wcResult.Ok)
{
return ErrorHandler(...);
}
else
{
return SuccessFunction(...);
}
}
catch (Exception e)
{
return e.Message;
}
Run Code Online (Sandbox Code Playgroud)
基本上,如果插入因任何原因(硬件不再正常工作)失败,我想处理它(通过ErrorHandler函数或catch子句),如果成功,我想调用SuccessFunction.
我的问题:以上代码是否足以进行错误检查?换句话说,是否会捕获所有失败的插入,以便在这些情况下永远不会调用SuccessFunction?