如何打印BSONDocument的内容

时间:2016-01-15 16:16:42

标签: scala playframework bson reactivemongo

我正在使用reactiveMongo来实现CRUD操作,这是我在线教程中的find函数。

def findTicker(ticker: String) = {
    val query = BSONDocument("firstName" -> ticker)
    val future = collection.find(query).one

    future.onComplete {
      case Failure(e) => throw e
      case Success(result) => {
        println(result)

      }
    }
  }

但是我得到了这个结果:

Some(BSONDocument(<non-empty>))

如何实际查看我正在阅读的实际可读JSON数据:

{ "_id" : ObjectId("569914557b85c62b49634c1d"), "firstName" : "Stephane", "lastName" : "Godbillon", "age" : 29 }

3 个答案:

答案 0 :(得分:3)

您可以在没有playframework模块的情况下执行此操作。对此有一个pretty函数:

result match{
  case Some(document) => println(BSONDocument.pretty(document))
  case None => println("No document")
}

答案 1 :(得分:2)

使用Play-ReactiveMongo

所以你有几个选择。看起来你使用Play框架,然后我假设Play-ReactiveMongo插件。如果是这样的情况结帐这个question它有点不同但我认为你可以重复使用提交的答案中的想法。

import play.modules.reactivemongo.json.BSONFormats._

然后在你的成功案例中

case Success(result) => {
 result.map { data =>
  Json.toJson(data)
}

还有其他选项可以将BSONDocuments转换为JSON,但Play-ReactiveMongo可以让事情变得更轻松。

如果没有Play-ReactiveMongo插件,您需要告诉ReactiveMongo如何写入和读取您的数据。要做到这一点,ReactiveMongo使用BSONDocumentReaders&amp; BSONDocumentWriters。它们提供了一个宏来为大多数类this link has more info

生成这些
import reactivemongo.bson._

//lets say your domain/case class is called Person
implicit val personHandler:BSONHandler[BSONDocument,Person] = Macros.handler[Person]

BSONHandler收集BSONReader和BSONWriter特征,您可以将其隐含在Persons伴侣对象中。

ReactiveMongos one方法在其正在寻找的实体类型上是通用的,并为您的实体提供隐式阅读器。

  def one[T](readPreference: ReadPreference)(implicit reader: Reader[T], ec:    ExecutionContext): Future[Option[T]]

因此,在此示例中,它将使用从上面的宏生成的Reader返回Future[Option[Person]]而不是Future[Option[BSONDocument]]。然后,您可以使用Play JSON以JSON

编写域

对于完全披露,您可以编写自己的客户编写者而不是使用宏,这些最终类似于编写Play JSON编写者和读者

答案 2 :(得分:0)

在编辑之前,此答案基于@Barry's以前的答案:

我使用play-reactivemongo更新版本让它工作: "org.reactivemongo" %% "play2-reactivemongo" % "0.11.9",

现在,

result.map { data =>
          println(Json.toJson(data))
        }

返回我想要的内容:

{"_id":0,"name":"MongoDB","type":"database","count":1,"info":{"x":203,"y":102}}