首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Play-Reactivemongo插件映射MongoDB _id?

使用Play-Reactivemongo插件映射MongoDB _id?
EN

Stack Overflow用户
提问于 2014-11-10 17:10:07
回答 2查看 715关注 0票数 6

我正在尝试使用Play-ReactiveMongo插件通过Play和Angular在MongoDB中读写简单的记录。这个插件似乎是一个很好的选择,因为它允许您使用简单的case类和常规的JSON,而不是显式地在BSON和JSON之间进行转换。但是,使用该插件的几个示例似乎并没有涵盖如何在同一框架内将MongoDB对象ID映射到JSON或从JSON映射。这一切似乎都是在后台进行大量隐式(对我来说是魔术)读/写操作,但它们似乎并不处理对象ID。

我的代码基于Alex Lashford的Modern Web Template,非常类似于Stephan Godbillion's example using JSON Read/Writes,但是Alex和Stephan都没有显示与MongoDB对象ID有任何关系。

我需要为我的数据记录提供一个唯一的ID,这样我就可以获取和更新它们,等等,使用MongoDB提供的ID是有意义的,但是我似乎找不到一种在Play ReactiveMongo插件中干净地使用它的方法。

有没有人知道一个例子,展示了如何通过JSON集合使用Play ReactiveMongo插件,以及如何将对象ID映射到JSON或从JSON映射到JSON,而不必将所有处理转换为使用BSON?

EN

回答 2

Stack Overflow用户

发布于 2015-06-30 17:17:19

我已经通过创建另一个case类解决了这个问题:

代码语言:javascript
复制
case class Id($oid: String)

然后按如下方式使用它:

代码语言:javascript
复制
case class User(_id: Id, ...)

您必须导入Json转换器

代码语言:javascript
复制
implicit val idFormat = Json.format[Id]
implicit val userFormat = Json.format[User]
票数 1
EN

Stack Overflow用户

发布于 2016-08-16 15:21:40

我不知道为什么reactivemongo团队决定在BSON中使用ObjectId,而不是在JSON中。无论如何,您可以构建MongoDB ObjectId的json表示,如下所示:

代码语言:javascript
复制
import play.api.libs.json._
def objectId(id: String) = Json.obj("$oid" -> id)
yourCollection.find(Json.obj("_id" -> objectId(id))).cursor()...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26840173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档