gpt4 book ai didi

java - MongoDB 处理 Java 插入失败

转载 作者:可可西里 更新时间:2023-11-01 09:36:46 25 4
gpt4 key购买 nike

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

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

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

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

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?

如果我应该检查,我能够通过检查插入结果检测到什么类型的错误?

最佳答案

您需要查看“ 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 将包含有用的信息,例如已写入的记录数。

在这里您可以在 general 中阅读有关 WriteConcern 的信息.

关于java - MongoDB 处理 Java 插入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19998394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com