我正在尝试使用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?
发布于 2015-06-30 17:17:19
我已经通过创建另一个case类解决了这个问题:
case class Id($oid: String)然后按如下方式使用它:
case class User(_id: Id, ...)您必须导入Json转换器
implicit val idFormat = Json.format[Id]
implicit val userFormat = Json.format[User]发布于 2016-08-16 15:21:40
我不知道为什么reactivemongo团队决定在BSON中使用ObjectId,而不是在JSON中。无论如何,您可以构建MongoDB ObjectId的json表示,如下所示:
import play.api.libs.json._
def objectId(id: String) = Json.obj("$oid" -> id)
yourCollection.find(Json.obj("_id" -> objectId(id))).cursor()...https://stackoverflow.com/questions/26840173
复制相似问题