sql >> データベース >  >> NoSQL >> MongoDB

トレイトおよび継承クラス用のMongodbscalaドライバーコーデック

    ほんの数日前に同じ懸念がありましたが、sealed traitsに関するドキュメントには何も見つかりませんでした MongoDBでADTをモデリングするため。

    結局、私はsealed classを使用しました 公式で提案されているようにScalaドライバーのgithubリポジトリ

    (抽象メソッドの定義のために)本当に特性を使用したい場合は、次のようにすることができます:

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

    これで、AのADTを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. Mongooseドキュメント内で自由形式のJSONデータを許可するにはどうすればよいですか?

    2. レプリカセットの設定を変更するにはどうすればよいですか?

    3. Sparkがタスクを実行していない

    4. 複数のファセット、Unwind、sortByCountを使用したAggregation Framework C#でのファセットの使用