【发布时间】:2015-02-24 00:23:45
【问题描述】:
我正在使用 spring framework 和 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 不为空且有相关错误。
我要插入的文档:
我也试图抓住Exception e,但没有成功。
collection.createIndex(new BasicDBObject("a", 1).append(, 1), unique);
DbObject edge = new BasicDBObject("a", "123").append("b", "345");
【问题讨论】:
-
请发布您尝试插入的文档以及具有相关 ID 的集合快照。
-
更新问题,谢谢
-
尝试将 WriteConcern 设置为
SAFE.api.mongodb.org/java/current/com/mongodb/WriteConcern.html。驱动程序似乎没有等待主服务器的确认。 -
是的,成功了。我认为设置 WriteresultChecking.EXCEPTION 就足够了。无论如何
SAFE可能很快就会被弃用,所以应该使用WriteConcern.ACKNOWLEDGED -
btw @BatScream 非常欢迎您添加我会接受的答案。
标签: java spring mongodb mongo-java mongotemplate