MongoDB 中的 Salat 方法问题:隐式视图和参数不足
Problems with Salat methods in MongoDB: implicit view & not enough arguments
我是 Salat、Casbah 和 MongoDB 的新手。当我一直在尝试制作一个简单的方法来从数据库中获取所有用户时,
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: Unit => com.mongodb.DBObject)com.novus.salat.dao.SalatMongoCursor[DAL.Instances.User.User].
Unspecified value parameter evidence.
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"))
}
我不确定您使用的 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
添加一个隐式转换,但我可能倾向于在可能的情况下将其显式化。
我是 Salat、Casbah 和 MongoDB 的新手。当我一直在尝试制作一个简单的方法来从数据库中获取所有用户时,
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: Unit => com.mongodb.DBObject)com.novus.salat.dao.SalatMongoCursor[DAL.Instances.User.User].
Unspecified value parameter evidence.
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"))
}
我不确定您使用的 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
添加一个隐式转换,但我可能倾向于在可能的情况下将其显式化。