sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb scala driver codec til egenskaber og nedarvede klasser

Jeg havde den samme bekymring for blot et par dage siden, men fandt ikke noget i dokumentationen vedrørende sealed traits til modellering af ADT i MongoDB.

Til sidst brugte jeg sealed class som foreslået i den officielle scala driver github repo .

Hvis du virkelig ønsker at bruge træk (på grund af definitionen af ​​abstrakte metoder), kan du gøre noget som dette:

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 for A defineret 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

Dette svar løser ikke spørgsmålet direkte, men giver en mulig løsning. Bemærk, at denne kode kun er et eksempel. For en mere komplet implementering kan du se denne github-repo .



  1. mongo shell script vil ikke lade mig inkludere brugen <database>

  2. Påmindelseskommando ved hjælp af MongoDB discord.py

  3. Indsæt en Pandas Dataframe i mongodb ved hjælp af PyMongo

  4. Opdatering af indlejrede arrays i mongodb