0

我尝试使用 Json 库来替换 Bson 库。这是有效的原始代码。

case class City(name: String, population: Int)

object City {
  implicit val reader = Macros.reader[City]
}

@Singleton
class CityController @Inject()(val reactiveMongoApi: ReactiveMongoApi)(implicit exec: ExecutionContext) extends Controller with MongoController with ReactiveMongoComponents {
  def findByMinPopulation(minPop: Int) = Action.async {
    import citiesBSON.BatchCommands.AggregationFramework.Match
    val futureCitiesList: Future[List[City]] = citiesBSON.aggregate(
      Match(BSONDocument("population" -> BSONDocument("$gte" -> minPop)))
    ).map(_.head[City])
    futureCitiesList.map { cities =>
      Ok(Json.toJson(cities))
    }
  }
}

这是使用 Json 编译但运行时出错的代码。

case class City(name: String, population: Int)

object City {
  implicit val formatter = Json.format[City]
}

@Singleton
class CityController @Inject()(val reactiveMongoApi: ReactiveMongoApi)(implicit exec: ExecutionContext) extends Controller with MongoController with ReactiveMongoComponents {
  def findByMinPopulation(minPop: Int) = Action.async {
    import cities.BatchCommands.AggregationFramework.Match
    val futureCitiesList: Future[List[City]] = cities.aggregate(
        Match(Json.obj("population" -> Json.obj("$gte" -> minPop)))
      ).map(_.head[City])
    futureCitiesList.map { cities =>
      Ok(Json.toJson(cities))
    }
  }
}

这是我收到的错误消息:

[RuntimeException: (,List(ValidationError(List(CommandError[code=59, errmsg=no such command: 'allowDiskUse', bad cmd: '{ allowDiskUse: false, explain: false, aggregate: "city", pipeline: [ { $match: { population: { $gte: 50000 } } } ], bypassDocumentValidation: false }', doc: {"ok":0,"errmsg":"no such command: 'allowDiskUse', bad cmd: '{ allowDiskUse :假,解释:假,聚合:\“城市\”,管道:[{$match:{人口:{$gte:50000}}}],bypassDocumentValidation:假}'“,”代码“:59}]) ,WrappedArray())))]

4

1 回答 1

2

正如@andrey.ladniy 所说,这个问题在 0.12.0-SNAPSHOT 版本中得到了修复。要使用此版本,请更新 build.sbt 文件并添加以下内容:

resolvers += "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/"
libraryDependencies ++= Seq(
  "org.reactivemongo" %% "play2-reactivemongo" % "0.12.0-SNAPSHOT"
)

并清除常春藤缓存。要在 IntelliJ IDEA 中执行此操作,只需选择“File”->“Invalidate Caches / Restart”,然后选择“Invalidate and Restart”。

我一开始没有清除缓存,即使更新到新版本也出现了同样的错误。

于 2016-03-25T21:14:07.220 回答