我有带有反应式 mongo 插件的 Play 2.3 应用程序。我有基本文件:
trait TemporalDocument {
val created: Option[DateTime] = Some(new DateTime())
val updated: Option[DateTime] = Some(new DateTime())
}
和一份具体文件:
case class User(name: String) extends TemporalDocument
object User{
implicit val userFormat = Json.format[User]
}
因此,当我使用响应式 mongo 插件将其持久化到 mongo db 时,仅保留名称,创建/更新的字段不会。
我的存储库看起来像:
trait MongoDocumentRepository[T <: TemporalDocument] extends ContextHolder {
private val db = ReactiveMongoPlugin.db
def insert(document: T)(implicit writer: Writes[T]): Future[String] = {
collection.insert(document).map {
lastError => lastError.toString
} recover {
case e: Exception => sys.error(e.getMessage)
}
}
private def collection: JSONCollection = db.collection[JSONCollection](collectionName)
implicit object BSONDateTimeHandler extends BSONHandler[BSONDateTime, DateTime] {
def read(time: BSONDateTime) = new DateTime(time.value)
def write(jdtime: DateTime) = BSONDateTime(jdtime.getMillis)
}
}
问题是我将有许多从基础文档扩展的文档,并且我不希望每次都初始化这些日期和可能的其他一些字段。有可能做这样的事情吗?