2015-03-06 2 views
5

У меня есть базовая модель с корпусом классаКак обрабатывать объекты MongoDB ObjectIds в Play, используя Reactivemongo?

case class Record(id: Option[String], 
       data: Double, 
       user: String, 
       ) 

object RecordJsonFormats { 
    import play.api.libs.json.Json 

    implicit val recordFormat = Json.format[Record] 
} 

поле user фактически является ObjectId другого модуля также id также является ObjectId еще попробуйте изменить тип String в BSONObjectId макросы в play.api.libs.json.Json перерыв ... так как user, так и при сохранении с объектом id поля сохраняются как String не ObjectId.

Каков оптимальный способ работы с ObjectIds в платформе Play?

  • Возможно, мне следует расширить play.api.libs.json.Json с помощью BSONObjectId?
  • Возможно, есть способ связать модели, и идентификаторы отслеживаются автоматически, без необходимости объявлять их в модели?

ответ

1

MongoDB имеет значение по умолчанию _id поля типа ObjectId, который однозначно идентифицирует документ в данной коллекции. Однако этот _id обычно не имеет семантического значения в контексте домена приложения. Поэтому хорошей практикой является введение дополнительного поля id в качестве индекса документов. Это id может просто длинное число, не более или менее.

После этого вы можете легко найти документы по адресу id и не заботиться о ObjectId.

Это, https://github.com/luongbalinh/play-mongo/, представляет собой образец проекта с использованием Play 2.4.x и ReactiveMongo. Надеюсь, это поможет вам.

2

Вы можете переопределить тип _id по умолчанию. Вам просто нужно указать тип, который вы хотите в классе case.

import java.util.UUID 
import play.api.libs.json._ 

case class Record (_id: UUID = UUID.randomUUID()) 

object Record { 
    implicit val entityFormat = Json.format[Record] 
}