使用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吗?
谢谢,
森
答案 0 :(得分:1)
如果写入操作失败,我该如何检测失败?驱动程序的'remove'call会抛出异常吗?
是的,你是对的。如果您使用的是WriteConcern.SAFE
(及更高版本),则驱动程序会在内部检查getLastError,如果结果文档包含错误,则会抛出异常。因此,在这种情况下,您无需检查WriteResult
。对于基于字符串的写入问题(例如“多数”)也是如此。
对于“lower”WriteConcern
(NORMAL或NONE),驱动程序只返回WriteResult
并且不会抛出异常。您必须手动检查它的错误属性。如果一切顺利,则为空,否则发生错误。