我在Play Framework App中使用reactivemongo
,我发现所有文档都代表
{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)
}
后一种表示也是我使用这种方法从DB中获取同一文档时得到的:
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 :(得分: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
答案 1 :(得分:0)
首先让我说下面的表示不是存储在使用BSON的MongoDB中的内容,而是使用JSON扩展语法序列化的内容(参见JSON documentation for ReactiveMongo)。
然后,在查询构建中使用.cursor[T]
时,您可以自由地提供自定义文档阅读器(在隐式范围内)。
使用JSON序列化包时,这意味着提供适当的Reads[T]
。
我还要补充一点,函数.find
和.save
基本上是ReactiveMongo Collection API已经完成的。