sql >> Databáze >  >> NoSQL >> MongoDB

Kodek ovladače Mongodb scala pro vlastnosti a zděděné třídy

Měl jsem stejnou obavu před několika dny, ale v dokumentaci jsem nenašel nic ohledně sealed traits pro modelování ADT v MongoDB.

Nakonec jsem použil sealed class jak je navrženo v oficiální scala ovladač github repo .

Pokud opravdu chcete používat vlastnosti (kvůli definici abstraktních metod), můžete udělat něco takového:

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

Nyní můžete mít svůj ADT pro A definovaný 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

Tato odpověď neřeší otázku přímo, ale poskytuje proveditelné řešení. Všimněte si, že tento kód je pouze příklad. Pro úplnější implementaci si můžete prohlédnout toto úložiště github .



  1. Výjimka MongoSocketReadException:Předčasně dosaženo konce streamu (po určité době nečinnosti)

  2. seskupit podle data v dotazu mogodb bez ohledu na čas

  3. Co lze udělat pomocí asynchronních úloh na pozadí CKAN?

  4. Služba MongoDB ve Fedoře neběží