2017-03-27 4 views
2

오류 메시지 :몽고 - 스칼라 - 드라이버 : CodecConfigurationException은 : 클래스 immutable.Document을위한 코덱을 찾을 수 없습니다

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

코드 : :와

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) 

    } 

를 호출

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) 


변경 가능한 문서를 사용해 보았지만 findoneandupdate가 변경할 수 없음을 반환한다는 것을 알았습니다. 나는 또한 BsonDocument와 같은 필터를 사용하려고했으나 ofc는 효과가 없었다.

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

그것을 : 여기에서 갈 곳 정말 모르겠어요, 어떤 도움을 주시면 감사하겠습니다 :)

+0

MongoCollection은 어떻게 작성하고 있습니까? 기본 코덱 레지스트리를 사용하지 않는 것 같습니다. – Ross

답변

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

내 MongoClientSettings 전에이처럼 보였다, 나는이로 변경 필요 mongo가 기본 코덱 레지스트리로 간주하지 않는 것 같습니다

@ Ross 덕분에 도움이되었습니다!