sql >> Database >  >> NoSQL >> MongoDB

Mongodb scala driver codec voor eigenschappen en overgeërfde klassen

Ik had dezelfde bezorgdheid een paar dagen geleden, maar ik vond niets in de documentatie over sealed traits voor het modelleren van ADT in MongoDB.

Uiteindelijk gebruikte ik sealed class zoals gesuggereerd in de officiële scala driver github repo .

Als je echt eigenschappen wilt gebruiken (vanwege de definitie van abstracte methoden), kun je zoiets als dit doen:

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 kunt u uw ADT voor A laten definiëren met 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

Dit antwoord lost de vraag niet direct op, maar biedt een haalbare oplossing. Merk op dat deze code slechts een voorbeeld is. Voor een meer complete implementatie kun je deze github-repo bekijken .



  1. node-mongodb-native:Hoe kan ik het db api-object van de verbindingscallback delen via mijn applicatie

  2. MongoDB $asinh

  3. MongoError:niet-herkende fasenaam van de pijplijn:'$changeStream'

  4. Hoe een lijst te krijgen van gebruikers die vandaag jarig zijn in MongoDB