2016-11-25 1 views
0

私はScalaで書かれたアプリケーションを使って、Mongoデータベースにアクセスしました。そこでは、データを完全にうまく照会して挿入することができます。ScalaのMongoDBコーデックが壊れていますか?

私はcollection.distinct("user")を使用しようとすると、しかし、私はエラーを取得する:

Unknown Error org.bson.codecs.configuration.CodecConfigurationException: 
    Can't find a codec for class scala.runtime.Nothing$. 

は、いくつかのグーグルを行った後、私はコーデックを指定する必要があるだろうことがわかったので、私は1でMongoClientをinitalised:

val clusterSettings = ClusterSettings 
    .builder() 
    .hosts(scala.collection.immutable.List(new com.mongodb.ServerAddress(addr)).asJava) 
    .build() 

val settings = MongoClientSettings.builder() 
       .codecRegistry(MongoClient.DEFAULT_CODEC_REGISTRY) 
       .clusterSettings(clusterSettings) 
       .build() 

val mongoClient: MongoClient = MongoClient(settings) 

まだ運がない、同じエラーが発生しました。

私は、カスタムコーデックas per this web pageを作成する必要があります考え出し:

class NothingCodec extends Codec[Nothing] { 
    override def encode(writer:BsonWriter, value:Nothing, encoderContext:EncoderContext)={} 
    override def decode(reader: BsonReader, decoderContext: DecoderContext): Nothing = { 
     throw new Exception 
    } 
    override def getEncoderClass(): Class[Nothing] = { 
     classOf[Nothing] 
    } 
} 

しかし、これは動作しませんも意味がない、何も有効な戻り値の型ではないではありません。 there exist no instances of this type。 その結果、これはobvisouly(もちろん!)Unknown Error java.lang.Exceptionの新しいエラーでは動作しません

を私はモンゴScalaのドライバで何かが足りないのですか?それともちょうど壊れていますか?

+0

http://reactivemongo.org/をご覧ください。 – cchantep

答えて

1

文書利用には、代わりに:

collection.distinct[Document]("user") 

// i.e. 

case class User(name: String, id: String) 

records.distinct[Document]("user") 
.toFuture() 
.map(_ map { doc => getUserFromBson(doc).get }) 

def getUserFromBson(doc: Document): Option[User] = { 
for { 
    name <- doc.get("name") map { x => x.asString().getValue } 
    id <- doc.get("id") map { x => x.asString().getValue } 
    }yield(User(name, id)) 
} 

は、このことができます願っています。

関連する問題