我有一个预先格式化的 JSON blob 作为一个字符串存储在 MongoDB 中,作为一个集合中的一个字段。目前在我基于 Scalatra 的 API 中,我有一个前置过滤器,它使用 JSON 内容类型呈现我的所有响应。我如何返回内容的示例如下所示:
get ("/boxscore", operation(getBoxscore)) {
val game_id:Int = params.getOrElse("game_id", "3145").toInt
val mongoColl = mongoDb.apply("boxscores")
val q: DBObject = MongoDBObject("game_id" -> game_id)
val res = mongoColl.findOne(q)
res match {
case Some(j) => JSON.parseFull(j("json_body").toString)
case None => NotFound("Requested document could not be found.")
}
}
现在这确实有效。这似乎不是“Scala”的做事方式,我觉得这可以优化。对我来说令人担忧的是,当我添加一个缓存层并且缓存没有命中时,我花费了额外的 CPU 时间来重新解析我已经在 MongoDB 中格式化为 JSON 的字符串:
JSON.parseFull(j("json_body").toString)
我必须从 findOne() 中获取结果,在其上运行 .toString,然后将其重新解析为 JSON。有没有更优的路线?由于 JSON 已经作为字符串存储在 MongoDB 中,我猜测序列化程序/案例类在这里不是正确的解决方案。当然我可以留下这里的东西——但我想知道是否有一种方法可以更类似于 Scala 并且对 CPU 更友好。