检查update / insert |中是否有错误 MongoDB Java驱动程序

我想检查insert失败 (由于集合中的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始终为null。 我怎样才能完成上述工作?


我已经看到了类似的SO问题,并提到了可以在insert()传递的WriteConcern 。 例如

 coll.insert(dbObj, WriteConcern.SAFE); 

来源: SO问题或Mongo文档

但是我不知道应该通过哪个字段(SAFE,ACKNOWLEDGED,UNACKNOWLEDGED等…)以获取错误。 也许我指的是错误的方向。

我不希望引发exception只是为了检查insert操作是否返回错误。

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

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

从Java驱动程序的v2.10开始,默认的Write Concern是ACKNOWLEDGED

编辑

我不希望引发exception只是为了检查插入操作是否返回错误。

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

insert方法确实返回WriteResult 。 如果它的getError()null ,则一切正常,否则返回E11000 duplicate key error index:... 为此,您必须使用WriteConcern.UNACKNOWLEDGED