3

我想处理插入到集合的失败(使用 Java),以确保我的插入成功。如果插入失败,我想执行一些后备操作。

假设以下代码使用 Java 和最新的 mongo 驱动程序(版本 2.11.3):

BasicDBObject doc = new BasicDBObject("name", "MongoDB");
WriteResult result = coll.insert(WriteConcern.SAFE, doc);

我对插入返回 WriteResult 并且它可能抛出 MongoException 的事实感到困惑。为了安全地检测任何可能的插入故障,我应该怎么做?请提供代码示例。如果您能澄清插入何时抛出异常以及何时返回一些错误写入结果。我尝试在http://api.mongodb.org/java/2.11.3/上搜索 java 驱动程序 API 文档;但是,那里缺少此信息。

WriteResult result;
try {
    result = coll.insert(WriteConcern.SAFE, doc);
}
catch(MongoException ex){
    logger.warn("Insert failed.", ex);
    throw ex;
}

//Shall I check result here for additional errors?  

如果我应该检查,我可以通过检查插入结果来检测什么类型的错误?

4

1 回答 1

3

你需要看看“ WriteConcern ”,它有你需要的所有行为。

您可以像这样每次写入使用它:

coll.insert(dbObj, WriteConcern.SAFE);

如果您使用 WriteConcern.SAFE,您的操作将等待来自主服务器的确认,因此如果没有引发异常,那么您就可以了。

或者,您可以在创建 MongoClient 时为所有写入操作设置默认行为:

MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.writeConcern(WriteConcern.JOURNAL_SAFE);
MongoClient mongoClient = new MongoClient(
    new ServerAddress("localhost"), builder.build());

[基于 Colin Morelli 的评论] 如果您不使用引发异常的 WriteConcern,则可以使用 WriteResult.getLastError() 来确定它是否成功。同样,如果您使用 WriteConcern.SAFE,并且写入成功,WriteResult 将包含有用的信息,例如已写入的记录数。

在这里,您可以大致了解 WriteConcern 。

于 2013-11-16T19:31:27.383 回答