Scala Play 2.0和MongoDB与Salat的接口

Scala Play 2.0和MongoDB与Salat的接口,scala,mongodb,playframework,Scala,Mongodb,Playframework,我的Play 2.0应用程序不断出现此错误: play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[MatchError: 4f7f4ae4251735803a942b2c (of class org.bson.types.ObjectId)]] at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:82) [play

我的Play 2.0应用程序不断出现此错误:

play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[MatchError: 4f7f4ae4251735803a942b2c (of class org.bson.types.ObjectId)]]
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:82) [play_2.9.1.jar:2.0]
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:63) [play_2.9.1.jar:2.0]
    at akka.actor.Actor$class.apply(Actor.scala:290) [akka-actor.jar:2.0]
    at play.core.ActionInvoker.apply(Invoker.scala:61) [play_2.9.1.jar:2.0]
    at akka.actor.ActorCell.invoke(ActorCell.scala:617) [akka-actor.jar:2.0]
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:179) [akka-actor.jar:2.0]
Caused by: scala.MatchError: 4f7f4ae4251735803a942b2c (of class org.bson.types.ObjectId)
    at com.novus.salat.transformers.in.LongToInt$class.transform(Injectors.scala:216) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at com.novus.salat.transformers.in.package$$anon$31.transform(Injectors.scala:180) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at com.novus.salat.transformers.Transformer$$anonfun$transform_$bang$1.apply(Transformer.scala:71) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at com.novus.salat.transformers.Transformer$$anonfun$transform_$bang$1.apply(Transformer.scala:71) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at scala.Option.flatMap(Option.scala:146) ~[scala-library.jar:0.11.2]
    at com.novus.salat.transformers.Transformer.transform_$bang(Transformer.scala:71) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
我的模型非常简单,我使用SalatDao风格的DB访问:

case class Gossip(@Key("_id") id: org.bson.types.ObjectId, title: String, link: String, description: String, permalink: String,
                  image: String, date: String) {}
object GossipDAO extends SalatDAO[Gossip, ObjectId](
  collection = MongoConnection()("gossips")("items"))
调用此函数时会引发错误:

val gossips = GossipDAO.find(ref = MongoDBObject("modificationDate" -> MongoDBObject("$gte" -> startDate))).toList
我已经通过其他脚本将数据加载到我的MongoDB中,它们似乎还可以,因为我可以在MongoDB shell中通过以下方式找到它们:

 db.items.find({_id:ObjectId("4f7f4ae4251735803a942b2c")})
更重要的是,如果我更改startDate条件以便没有对象匹配它,那么我的代码运行良好。这表明查询是正确的,但从MongoDBObject到Scala的八卦类的转换失败

上面的代码有问题吗

更新

我的依赖项仅限于此:

val appDependencies=Seq com.mongodb.casbah%%casbah%2.1.5-1, com.novus%%salat核心%0.0.8-SNAPSHOT

我使用“modificationDate”,因为它是mongoDB集合对象中的一个字段

当我执行db.items.find{{u id:ObjectId4f7f4ae4251735803a942b2c}时,我得到以下结果:

如果您只是获取整个集合,是否会发生类似的问题?
我不知道如何使用salat-DAO获取所有对象。但是当我的case类没有'id'键时,我只能在MongoConnection上执行db.find,它将返回所有可用对象并将它们转换为模型对象。同样的解决方案,当我添加'id'键时,产生了与上面相同的错误。

好吧,删除'target'目录并运行Play20似乎再次解决了这个问题。那里一定有一些旧的类信息。

如果您这样做会发生什么:db.items.find{case ObjectId4f7f4ae4251735803a942b2c=>true}我得到这个:星期二6月12日08:04:46语法错误:缺少:在属性id shell之后:1-请记住,我是从Mongo shell执行db.items.find,而不是scala。它应该在那里工作吗?我的Mongo版本是2.0.3一些奇迹。您是在使用play 2 salat模块还是导入了所有需要的内容?第二个奇迹是你过滤了modificationDate,但是你的模型中只有一个“日期”。最后一个问题,如果你只取整个集合,是否也会发生同样的问题?我已经用答案更新了我的问题。