Skip to main content
 首页 » 编程设计

java中检查更新/插入是否有错误 | MongoDB Java 驱动程序

2024年11月24日72zengkefu

我想检查插入是否失败(由于集合中的unique=True索引)。如果出现错误,请执行某些操作。下面是我的代码示例。

DBCollection user...; 
BasicDBObject Doc = new BasicDBObject(... ); 
 
String user_exists = user.insert(Doc).getError(); //insert the doc get error if any 
if(user_exists!=null){ //any errors? 
    user.update(new BasicDBObject(...)); // error exists so do smthng 
} 

上面的内容不起作用。我相信 String user_exists 始终为空。我怎样才能实现上述工作?


我见过类似的SO问题并提到WriteConcern可以在 insert() 中传递。例如

coll.insert(dbObj, WriteConcern.SAFE); 

来源:SO question 或者 Mongo docs

但是我不知道应该传递哪一个字段(安全、已确认、未确认等)才能得到错误。也许我指向了错误的方向。

我不想只是为了检查 insert 操作是否返回错误而引发异常。

请您参考如下方法:

如果您使用WriteConcern.ACKNOWLEDGED(我认为这也是SAFE),您不需要通过错误检查来污染您的代码。

对于 ACKNOWLEDGED,驱动程序将自动发出 getLastError 命令,并在出现任何错误(例如重复索引违规)时引发异常。

从 Java Driver v2.10 开始,默认的 Write Concern 为 ACKNOWLEDGED

编辑

I do not wish to raise an exception just to check if there is an error returned by the insert operation.

您不应该这样做,但无论如何:

insert 方法确实返回 WriteResult。如果getError()null,则一切正常,否则返回诸如E11000重复键错误索引:...之类的内容。为此,您必须使用 WriteConcern.UNACKNOWLEDGED