MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb scala драйверен кодек за характеристики и наследени класове

Имах същото безпокойство само преди няколко дни, но не намерих нищо в документацията относно sealed traits за моделиране на ADT в MongoDB.

В крайна сметка използвах sealed class както е предложено в официален scala драйвер github repo .

Ако наистина искате да използвате характеристики (поради дефиницията на абстрактни методи), можете да направите нещо подобно:

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

Сега можете да дефинирате своя ADT за A с 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

Този отговор не решава директно въпроса, но предоставя възможно заобиколно решение. Имайте предвид, че този код е само пример. За по-пълно внедряване можете да видите това репо на github .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. как да конвертирате шестнадесетичен низ в ObjectId в Python

  2. Как да съхранявате големи числа в MongoDB с Node.js

  3. Сортиране в Mongodb с нечувствителен към главните и малки букви начин

  4. Заявка за последната стойност на масива

  5. Mongodb регулярен израз в агрегация, използвайки препратка към стойността на полето