问候语,
我正在使用Salat和Casbah在Mongodb
中创建一个用户集合,一切都很好,直到我在电子邮件字段上添加了一个唯一的索引。现在,我的insert返回一个唯一的id,在DB中没有为现有电子邮件地址添加实际记录。我是斯卡拉和卡斯巴/萨拉特的新手,所以如果我问了一个明显的问题,我很抱歉。
这是我的收藏索引
db.users.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "study_test.users"
},
{
"v" : 1,
"unique" : true,
"key" : {
"email" : 1
},
"name" : "users_email",
"ns" : "study_test.users"
}
]
这是我的dao对象
object UserDao extends SalatDAO[UserModel, ObjectId](collection = MongoUtil.getCollection("study", "users")) {
val logger = LoggerFactory.getLogger(UserDao.getClass)
val dao = this
UserDao.collection.ensureIndex(DBObject("email" -> 1), "users_email", true)
RegisterJodaTimeConversionHelpers()
def create(userContract: UserContract): Option[ObjectId] = {
val userModel = UserConverter.toModel(userContract)
dao.insert(userModel)
}
}
我发现了问题所在,我升级了mongodb和casbah 2.10,但使用MongoConnection连接到mongodb。我使用mongo客户端切换到连接,所有工作都如预期。
"现在我的插入返回一个唯一的id,而没有在数据库中为现有电子邮件地址添加实际记录。"你能指定一个例子吗?
由于您有一个唯一的索引,对于相同的电子邮件id,新的插入(或scala/casbah的任何行为(都会失败。