java mongodb 驱动程序在重复键上不会引发异常

标签 java spring mongodb mongo-java mongotemplate

我正在使用spring框架mongoTemplate。 bean 启动:

public
@Bean
MongoTemplate mongoTemplate() throws Exception {
    MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
    mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION);

    return mongoTemplate;
}

简而言之,此代码不会因重复键而失败

collection= mTemplate.getCollection("col");
try {
        final WriteResult writeResult = collection.insert(edge);

} catch (DuplicateKeyException e) {
        log.warn("@error> edge already exists");

        return null;
}

writeResult._lastErrorResult 不为 null,并且有相关错误。

我要插入的文档: 我也 try catch Exception e但没有成功。

collection.createIndex(new BasicDBObject("a", 1).append(, 1), unique);
DbObject edge = new BasicDBObject("a", "123").append("b", "345");

最佳答案

您需要将 MongoDB 驱动程序的 WriteConcern 设置为 Acknowledged .

来自文档,

Write operations that use this write concern will wait for acknowledgement from the primary server before returning. Exceptions are raised for network issues, and server errors.

关于java mongodb 驱动程序在重复键上不会引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661376/

相关文章:

java - 测试 Spring Boot 存储库时不会引发预期的异常

mongodb - 查询Mongo中是否有空对象

java - 从 Android 上的摄像头流式传输实时视频

java - 通过代码为 STS/WS-Trust 配置 CXF

mysql - 在 Spring Boot 和 Hibernate 应用程序中使用 XtraDB 作为存储引擎

spring - Rest 模板中带有 307 状态代码的空响应实体

mongodb - Mongo查询子文档的多个字段

javascript - express.js 以任意顺序链式路由

java - Jenkins 显示 log4j 提示 : log4j:WARN No appenders could be found for logger

java - 为什么RocketMQ DefaultMQProcuderImpl即使消息发送成功也会调用updateFaultItem