sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb scala drivrutin codec för egenskaper och ärvda klasser

Jag hade samma oro för bara några dagar sedan men hittade ingenting i dokumentationen angående sealed traits för modellering av ADT i MongoDB.

Till slut använde jag sealed class som föreslås i den officiella scala drivrutin github repo .

Om du verkligen vill använda egenskaper (på grund av definitionen av abstrakta metoder) kan du göra något så här:

package example.model

import example.model.adt._
import org.mongodb.scala.bson.ObjectId
import org.mongodb.scala.bson.codecs.Macros._
import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY
import org.bson.codecs.configuration.CodecRegistries.{fromProviders, fromRegistries}

trait MongoModel {
  def _id: ObjectId
}

object MongoModel {
  val codecRegistery = fromRegisteries(fromProviders(classOf[A]), DEFAULT_CODEC_REGISTRY)
}

Nu kan du få din ADT för A definierad med sealed class .

package example.model.adt

import example.model.MongoModel
import org.mongodb.scala.bson.ObjectId

sealed class A

final case class B(_id: ObjectId) extends A with MongoModel
final case class C(_id: ObjectId) extends A with MongoModel

Det här svaret löser inte frågan direkt men ger en möjlig lösning. Observera att den här koden bara är ett exempel. För en mer komplett implementering kan du se denna github-repo .



  1. Hur projekterar DBRef på Spring MongoDB Aggregation?

  2. Infoga data i inre array i MongoDB

  3. Rails mongoida regex på ett heltalsfält

  4. Ändra standard filbehörighet på redis dump