检查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