2016-02-25 34 views
1

我是Salat,Casbah和MongoDB的新成員。當我一直試圖做一個簡單的方法來獲取從數據庫中的所有用戶,MongoDB中Salat方法的問題:隱式視圖和沒有足夠的參數

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")) 

} 

回答

0

我不確定你使用的是Salat的版本,但是如果你看看find的簽名,它會給你一個線索,看看問題是什麼:

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

您需要撥打find並使用參數view bound,以便該參數可以被視爲DBObject。這意味着從A => DBObject的隱式轉換預計將在範圍內。

在你的情況下,你沒有傳遞任何參數。這被視爲Unit,因此編譯器試圖從Unit => DBObject中找到隱式轉換。這不能找到,所以編譯失敗。

要解決這個問題,最好的辦法是傳入一個空的DBObject,你可以用MongoDBObject.emptycasbah來實現。你可以添加一個隱含的從Unit => MongoDBObject轉換,但我可能傾向於儘可能明確。

相關問題