2016-01-15 3 views
0

Я использую tyring для реализации операций CRUD с помощью реактивнойMongo, и вот моя функция поиска из учебника онлайн.Как распечатать содержимое 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

С Play -ReactiveMongo

Итак, у вас есть несколько вариантов. Похоже, что вы используете платформу Play, а затем я предполагаю Play-ReactiveMongo Plugin. Если это проверка дела, это question Его немного отличается, но я думаю, что вы можете повторно использовать идеи из представленного ответа.

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

, а затем в вашем случае успеха

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

Есть и другие варианты, чтобы преобразовать BSONDocuments в формате JSON, но играть-ReactiveMongo делает вещи проще.

Без плагина Play-ReactiveMongo вам нужно будет сообщить ReactiveMongo, как писать и читать ваши данные. Для этого ReactiveMongo использует BSONDocumentReaders & BSONDocumentWriters. Они обеспечивают Macro генерировать эти для большинства классов 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]] 

Таким образом, в этом примере он будет использовать Ридер сгенерированный из выше Macro, чтобы вернуть Future[Option[Person]] вместо Future[Option[BSONDocument]].Затем вы можете использовать Play JSON, чтобы написать свой домен в формате JSON

Для полного раскрытия вы можете написать свои собственные писатель клиентов, а не использовать Macro и они в конечном итоге похож на написание Play JSON писателей и читателей

+1

Мысль об одном, дайте мне знать версию игры вы используете их JSON библиотека изменилась в последних версиях так Плей-ReactiveMongo имеет был обновлен. Импорт выше будет для более старой версии игры – Barry

+0

Я использую драйвер reactivemongo, а не режим воспроизведения :( – summerNight

+0

Моя версия PLAY 2.4.6 – summerNight

2

Вы можете сделать это без модуля playframework. Существует pretty функция для этого специальным образом:

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

 Смежные вопросы

  • Нет связанных вопросов^_^