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

时间:2014-02-05 21:26:34

标签: java mongodb 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始终为空。我怎样才能完成上述工作?


我看过类似的SO问题,并提到insert()中可以传递的WriteConcern。 E.g。

coll.insert(dbObj, WriteConcern.SAFE);

来源:SO question 要么 Mongo docs

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

修改

  

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

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

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