2016-07-04 7 views
0

Я использую reactivemongo в моем Play Framework App, и я заметил, что все документы представлены в виде, например,Удаления MongoDB ID объекта при обработке результатов из коллекции

{name: "Robert", age: 41 } 

хранится в MongoDB, как

{_id: { $oid:"574005977e356b7310bcdc8d"}, name: "Robert", age: 41 } 

и все в порядке. Это метод я использую, чтобы сохранить документы

// Scala code 
def save(document: JsObject) 
     (implicit ec: ExecutionContext): Future[WriteResult] = { 
    collection.insert(document) 
} 

Последнее представление также то, что я получаю, когда я получать один и тот же документ из БД, используя этот метод:

def find(query: JsObject, queryOptions: QueryOpts, projection: JsObject, 
      sort: JsObject, pageSize: Int) 
(implicit ec: ExecutionContext): Future[List[JsObject]] = { 
    collection.find(query, projection) 
    .options(queryOptions) 
    .sort(sort) 
    .cursor[JsObject](ReadPreference.primaryPreferred) 
    .collect[List](pageSize) 
    } 

, но в данном случае я «хотел бы получить представление, как

{_id: "574005977e356b7310bcdc8d", name: "Robert", age: 41 } 

для того, чтобы отправить документы запрашивающему клиенту через мой RESTful API. Как я могу это получить?

+0

Вы можете использовать трансформаторы Json: [Случай 6: обрезать ветку с входа JSON] (https://www.playframework.com/documentation/2.5.x/ScalaJsonTransformers#Case-6:-Prune-a-branch- из-ввода-JSON) –

ответ

0

Вы можете использовать Json transformers: Case 6: Prune a branch from input JSON

... 
.collect[List](pageSize) 
.map(JsArray) 
.map(
    _.transform(
    Reads.list(
     (__\"_id").json.prune 
    ) 
) 
) 
... tranform JsResult to your needs 
0

Прежде всего позвольте мне сказать, что следующее представление не то, что хранится в MongoDB, который использует BSON, но то, что сериализации с помощью расширенного синтаксиса JSON (см JSON documentation for ReactiveMongo).

Затем при использовании .cursor[T] в сборке запросов вы можете предоставить собственный читатель документов (в неявной области). При использовании пакета сериализации JSON это означает предоставление соответствующего Reads[T].

Я также хотел бы добавить, что функции .find и .save - это то, что уже сделано ReactiveMongo Collection API.