MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Kodek sterownika Mongodb scala dla klas cech i dziedziczonych

Miałem ten sam problem zaledwie kilka dni temu, ale nie znalazłem niczego w dokumentacji dotyczącej sealed traits do modelowania ADT w MongoDB.

W końcu użyłem sealed class zgodnie z sugestią w oficjalnym repozytorium github sterownika scala .

Jeśli naprawdę chcesz używać cech (ze względu na definicję metod abstrakcyjnych), możesz zrobić coś takiego:

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)
}

Teraz możesz zdefiniować ADT dla A za pomocą 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

Ta odpowiedź nie rozwiązuje bezpośrednio pytania, ale zapewnia możliwe obejście problemu. Zauważ, że ten kod jest tylko przykładem. Aby uzyskać pełniejszą implementację, możesz zobaczyć to repozytorium github .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak mogę zapisać przechowywany skrypt java w mongodb z node.js

  2. za pomocą secureIndex w schemacie mongodb za pomocą mongoose

  3. MongoDB Seattle 2014

  4. Jaka jest różnica między limitem a rozmiarem partii w MongoCursor?

  5. Pobrać pierwszy element w tablicy i zwrócić za pomocą Aggregate?