WriteConcern.SAFE会导致DBCollection.remove()在失败时抛出异常吗?

时间:2013-08-29 21:34:54

标签: mongodb mongodb-java

使用java mongo驱动程序时,我对WriteConcern,WriteResult和getLastError有点困惑。

我理解不同的WriteConcerns在WriteConcern.SAFE中的含义导致写操作被阻塞,直到驱动程序从mongodb服务器收到确认。我很困惑,当写作有问题时会发生什么。

例如

DBCollection collectionHandle = ...
DBObject criteria = ...
WriteResult result = collectionHandle.remove(criteria, WriteConcern.SAFE)

如果写入操作失败,我该如何检测失败? 驱动程序的'remove'call会抛出异常吗? 是否需要检查WriteResult? 如果检查WriteResult会调用getError或getLastError吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

  

如果写入操作失败,我该如何检测失败?驱动程序的'remove'call会抛出异常吗?

是的,你是对的。如果您使用的是WriteConcern.SAFE(及更高版本),则驱动程序会在内部检查getLastError,如果结果文档包含错误,则会抛出异常。因此,在这种情况下,您无需检查WriteResult。对于基于字符串的写入问题(例如“多数”)也是如此。

对于“lower”WriteConcern(NORMAL或NONE),驱动程序只返回WriteResult并且不会抛出异常。您必须手动检查它的错误属性。如果一切顺利,则为空,否则发生错误。