【发布时间】:2014-04-15 20:59:02
【问题描述】:
我正在使用 Spring-Data/MongoDB 并在保存/插入时正确捕获重复键。
例如,假设我有一个用户被保存到一个集合中。 User 对象用两个@Indexed(unique=true)(两个唯一键)注释。假设它们是“电子邮件”和“用户名”。如何检索在插入过程中实际复制的索引。
我得到的最接近的是当我执行这种类型的示例代码时:
public boolean createNewUser() {
MongoTemplate operations = RepositoryFactory.getMongoOperationsInstance();
try {
log.debug("Saving new user to DB");
operations.save(this);
return true;
} catch (DuplicateKeyException dke) {
log.debug("User with same username or email found");
log.debug(operations.getDb().getLastError());
return false;
}
}
这会打印字符串:
{ "serverUsed" : "/127.0.0.1:27017" , "err" : "E11000 duplicate key error index: Collection.user.$username dup key: { : \"user\" }" , "code" : 11000 , "n" : 0 , "connectionId" : 17 , "ok" : 1.0}
没有愚蠢的字符串操作或 Json 转换,有没有办法通过 Mongodriver API 提取Collection.user.$username?
我一直在搜索不成功。
【问题讨论】:
-
对于任何来这里寻找如何处理 DuplicateKeyException 的人,它似乎已被弃用。显然应该使用 MongoWriteException 并匹配代码groups.google.com/forum/#!topic/mongodb-user/tNKJ6sczXHI
标签: java spring mongodb spring-data