使用Scala Salat / Casbah和Mongodb插入新记录

时间:2014-04-30 05:48:48

标签: mongodb scala casbah salat

问候,

我正在使用Salat和Casbah在Mongodb中创建用户集合,在我在电子邮件字段中添加唯一索引之前,一切正常。现在,我的插入返回一个唯一的ID,在DB中没有为现有电子邮件地址添加实际记录。我是scala和Casbah / Salat的新手,所以如果我提出一个明显的问题,我会道歉。

这是我的集合索引

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)

}
}

2 个答案:

答案 0 :(得分:1)

我发现问题是什么,我升级了mongodb和casbah 2.10,但使用MongoConnection连接到mongoDB。我使用mongo客户端切换到连接,所有工作都按预期工作。

答案 1 :(得分:0)

你是什么意思“现在我的插入返回一个唯一的ID,在数据库中没有为现有的电子邮件地址添加实际记录。”你能举个例子吗?

由于您具有唯一索引,因此对于相同的电子邮件ID,插入将对新插入(或scala / casbah的任何行为)失败。