我发现官方的 MongoDB C# 驱动程序中,有些方法使用了 SafeMode
并返回 SafeModeResult
。什么是 SafeMode
,如何使用它?能否提供一些使用案例,例如在 MongoCollection
的 RemoveAll
方法中的使用案例。
我发现官方的 MongoDB C# 驱动程序中,有些方法使用了 SafeMode
并返回 SafeModeResult
。什么是 SafeMode
,如何使用它?能否提供一些使用案例,例如在 MongoCollection
的 RemoveAll
方法中的使用案例。
仅在向数据库写入数据时才需要考虑安全模式。
为了提高速度,如果关闭了安全模式并且写操作失败,驱动程序不会等待处理。其结果是没有异常被抛出,你不知道是否有错误发生。
打开安全模式将强制驱动程序等待成功确认,并在发生错误时抛出异常。
对于重要的数据(如用户帐户、订单等),请使用安全模式。
对于非必需的数据(如日志、使用统计等),不要使用安全模式。
MongoDB的默认行为是关闭安全模式。
来自文档:
有各种不同级别的安全模式,这个类用于表示这些级别。SafeMode 仅适用于没有返回值的操作(因此不适用于查询或命令)。它适用于以下 MongoCollection 方法:Insert、Remove、Save 和 Update。
SafeMode 的要点是,在将 Insert、Remove、Save 或 Update 消息发送到服务器后,会跟随一个 GetLastError 命令,以便驱动程序可以验证操作是否成功。此外,在使用副本集时,可以验证信息已复制到一些最少数量的辅助服务器。
SafeMode 类具有静态属性和方法,可让您轻松访问常见模式或创建自己的模式:
* SafeMode.False
* SafeMode.True
* SafeMode.WaitForReplications(int n)
"n" 的值包括主节点,因此通常您需要 n >= 2。
我希望这足以理解 SafeMode 的目的。
SafeMode
看起来已经过时了。
等价物是在 MongoClientSettings
上的WriteConcern.Acknowledged (通常传递给MongoClient
构造函数)。在当前版本的驱动程序(2.2.4)中,Acknowledged是默认的 WriteConcern。