我想检查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
操作是否返回错误而引发异常。
答案 0 :(得分:1)
如果您使用WriteConcern.ACKNOWLEDGED
(我认为也是SAFE
),您不需要通过错误检查来污染您的代码。
对于ACKNOWLEDGED
,驱动程序将自动发出getLastError
命令,并在出现任何错误时引发异常,例如重复索引违规。
从Java驱动程序的v2.10开始,默认的Write Concern为ACKNOWLEDGED
修改强>
我不希望引发异常只是为了检查插入操作是否返回错误。
你不应该这样做,但无论如何:
insert
方法确实返回WriteResult
。如果getError()
为null
,则一切正常,否则会返回E11000 duplicate key error index:...
之类的内容。为此,您必须使用WriteConcern.UNACKNOWLEDGED