2015-03-06 10 views
5

Ich habe ein Basismodell mit einer FallklasseWie behandelt man MongoDB ObjectIds im Play-Framework mit 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] 
} 

Feld user eigentlich auch ein ObjectId anderen Modul ist id auch noch dann ein ObjectId ist versuchen String Typ BSONObjectId Makros in play.api.libs.json.Json Pause zu ändern ... so beide user und wenn mit Objekt id Felder gespeichert werden gespeichert als String nicht .

Was ist der optimale Weg, um mit ObjectIds im Play Framework zu arbeiten?

  • Vielleicht sollte ich play.api.libs.json.Json mit BSONObjectId verlängern?
  • Vielleicht gibt es eine Möglichkeit zum Verknüpfen von Modellen und IDs werden automatisch verfolgt, ohne dass sie im Modell deklariert werden müssen?

Antwort

1

MongoDB hat einen Standard _id Felder vom Typ ObjectId, die eindeutig ein Dokument in einer bestimmten Sammlung identifiziert. Diese _id hat jedoch typischerweise keine semantische Bedeutung im Kontext der Anwendungsdomäne. Daher ist es eine gute Praxis, ein zusätzliches Feld ID als Index von Dokumenten einzuführen. Diese ID kann einfach eine Lange Zahl, nicht mehr oder weniger.

Dann können Sie Dokumente nach ID leicht suchen, und ObjectId kümmert sich nicht viel.

Dies, https://github.com/luongbalinh/play-mongo/, ist ein Beispielprojekt mit Play 2.4.x und ReactiveMongo. Hoffentlich hilft es dir.

2

Sie können den Standardtyp von _id überschreiben. Sie müssen nur den gewünschten Typ in der Fallklasse angeben.

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

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

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