我想检查插入
是否失败(由于集合中的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