简体   繁体   中英

Mongo-Scala-Driver: CodecConfigurationException: can't find a codec for class immutable.Document

Error message:

org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class org.mongodb.scala.bson.collection.immutable.Document

Code:

def queueWrite(collection: String, filter: Map[String, () => String], data: Map[String, () => String]) {
    val col = collections.get(collection).get

    val filterBson = Document()
    filter.foreach(f => { filterBson.append(f._1, f._2.apply) })

    val dataBson = Document()
    data.foreach(f => { dataBson.append(f._1, f._2.apply) })

    val options = new FindOneAndUpdateOptions
    options.returnDocument(ReturnDocument.AFTER)
    options.upsert(true)

    val observer = new Observer[Document] {
      override def onNext(doc: Document) = println(doc.toJson)
      override def onError(e: Throwable) = e.printStackTrace
      override def onComplete = println("onComplete")
    }

    val observable: Observable[Document] = col.findOneAndUpdate(filterBson, dataBson, options)
    observable.subscribe(observer)

  }

Called with:

val filter = Map[String, () => String]("uuid", p.getUniqueId.toString)

var dataMap = Map[String, () => String]()
dataMap = dataMap.+("uuid" -> p.getUniqueId.toString)
dataMap = dataMap.+("nickname" -> p.getDisplayName)

queueWrite("players", filter, dataMap)


I've tried using mutable documents but then realized that findoneandupdate returns an immutable. I also tried using a BsonDocument for the filter with equal but that ofc had no effect. I'm not really sure where to go from here, any help would be greatly appreciated :)

private val settings = MongoClientSettings.builder
    .clusterSettings(clusterSettings)
    .build

My MongoClientSettings looked like this before, I needed to change it to this:

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

It seems mongo didn't assume default codec registry

Thanks to @Ross for the help!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM