2016-01-15 71 views
0

我打算使用reactiveMongo来实现CRUD操作,这里是我的在线教程的查找功能。如何打印BSONDocument的内容

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数据,我looing为:

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

+1

'BSONDocument.pretty(bsonDoc)'的一件事 – cchantep

回答

0

本答案基于@Barry's以前的答案的编辑前:

我得到了它使用播放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}}

2

随着播放-ReactiveMongo

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

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

,然后在你的成功案例

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

还有其他的选择,以BSONDocuments转换成JSON,但播放-ReactiveMongo使事情变得更容易。

没有Play-ReactiveMongo插件您需要告诉ReactiveMongo如何编写和读取您的数据。要做到这一点ReactiveMongo使用BSONDocumentWriters使用BSONDocumentReaders &。他们提供了一个宏来生成这些对于大多数类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特质,你可以把这个隐含的人员伴侣的对象。

ReactiveMongos one方法对于它正在查找的实体类型是通用的,并且为您的实体使用隐式读取器。

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

因此,在这个例子中,将使用从上面的宏所产生的阅读器返回的Future[Option[Person]]代替Future[Option[BSONDocument]]。然后你可以使用播放JSON来写你的域JSON

充分披露,你可以写你自己的客户作家,而不是使用宏而这些最终会被类似于编写播放JSON作家与读者

+1

思想让我知道玩的版本使用的是自己的JSON库在最新版本的改变,从而播放,ReactiveMongo有已更新。上面的导入将用于老版本播放 – Barry

+0

我使用的是reactivemongo驱动程序,而不是播放模块:( – summerNight

+0

我的播放版本是2.4.6 – summerNight

2

你可以做到这一点没有playframework模块。有此一pretty功能specialy:

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