MongoDB中Salat方法的问题:隐式视图&没有足够的论据

时间:2016-02-25 23:38:15

标签: mongodb scala casbah salat

我是Salat,Casbah和MongoDB的新手。当我一直试图用一个简单的方法从db获取所有用户时,

 import DAL.Instances.User.{UserDAO, User}
    import com.novus.salat._
    import com.novus.salat.global._
    import com.novus.salat.annotations._
    import com.novus.salat.dao._
    import com.mongodb.casbah.Imports._
    import com.mongodb.casbah.MongoConnection



    object UserRepository {

        def getAllUsers() = {

        val userList= UserDAO.find()

        userList.isEmpty match {
          case true => throw new Exception("None users in your db")
          case false => userList
        }
}

我遇到了两个错误:

Error:(29, 31) No implicit view available from Unit => com

.mongodb.DBObject.
        val userList= UserDAO.find()
                                  ^
    Error:(29, 31) not enough arguments for method find: (implicit evidence$2: Unit => com.mongodb.DBObject)com.novus.salat.dao.SalatMongoCursor[DAL.Instances.User.User].
Unspecified value parameter evidence$2.
    val userList= UserDAO.find()
                              ^

这是我的用户代码:

object User {
  case class User( _id: ObjectId = new ObjectId, name:String, age:Int)
  object UserDAO extends SalatDAO[User, ObjectId](collection = MongoConnection()("fulltestdb")("user"))

}

1 个答案:

答案 0 :(得分:0)

我不确定您使用的Salat版本是什么,但如果您查看find的签名,它会为您提供有关问题的线索:

def find[A <% DBObject](ref: A): SalatMongoCursor[ObjectType]

您需要使用view bound的参数调用find,以便可以将此参数视为DBObject。这意味着预计来自A => DBObject的隐式转换将在范围内。

在您的情况下,您没有传递任何参数。这被视为Unit,因此编译器会尝试从Unit => DBObject中找到隐式转换。无法找到,因此编译失败。

要解决此问题,最好的方法是传入一个空DBObject,您可以使用casbah中的MongoDBObject.empty来实现此目的。您可以添加Unit => MongoDBObject的隐式转化,但我可能会倾向于尽可能明确地进行转换。