1

I have this case class:

case class CodeRegister(id: String, name: String, code: Option[CodeData])
case class CodeData(code: String, expiry: Long)

I've registered both CodeRegister and CodeData via fromProviders method. And now I've tried to update the field code with this code

collection.updateOne(equal("id",record. id),
    set("code", record.code)).
    toFutureOption()

However, I've got this error

org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class scala.Some.
at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:37)
at com.mongodb.client.model.BuildersHelper.encodeValue(BuildersHelper.java:37)
at com.mongodb.client.model.Updates$SimpleUpdate.toBsonDocument(Updates.java:445)
at com.mongodb.client.model.Updates$CompositeUpdate.toBsonDocument(Updates.java:614)
at com.mongodb.internal.operation.Operations.toBsonDocument(Operations.java:489)
at com.mongodb.internal.operation.Operations.bulkWrite(Operations.java:369)
at com.mongodb.internal.operation.Operations.updateOne(Operations.java:318)
at com.mongodb.internal.operation.AsyncOperations.updateOne(AsyncOperations.java:168)
at com.mongodb.async.client.MongoCollectionImpl.executeUpdate(MongoCollectionImpl.java:702)
at com.mongodb.async.client.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:659)
at com.mongodb.async.client.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:653)
at org.mongodb.scala.MongoCollection.$anonfun$updateOne$1(MongoCollection.scala:861)
at org.mongodb.scala.MongoCollection.$anonfun$updateOne$1$adapted(MongoCollection.scala:861)
at org.mongodb.scala.internal.ObservableHelper$$anon$1.apply(ObservableHelper.scala:36)
at org.mongodb.scala.internal.ObservableHelper$$anon$1.apply(ObservableHelper.scala:35)
at com.mongodb.async.client.SingleResultCallbackSubscription.requestInitialData(SingleResultCallbackSubscription.java:38)
at com.mongodb.async.client.AbstractSubscription.tryRequestInitialData(AbstractSubscription.java:151)
at com.mongodb.async.client.AbstractSubscription.request(AbstractSubscription.java:84)
at org.mongodb.scala.ObservableImplicits$BoxedSubscription.request(ObservableImplicits.scala:490)
at org.mongodb.scala.ObservableImplicits$ScalaObservable$$anon$2.onSubscribe(ObservableImplicits.scala:366)
at org.mongodb.scala.ObservableImplicits$ToSingleObservable$$anon$3.onSubscribe(ObservableImplicits.scala:441)
at org.mongodb.scala.internal.SubscriptionCheckingObserver.onSubscribe(SubscriptionCheckingObserver.scala:28)
at org.mongodb.scala.Observer.onSubscribe(Observer.scala:85)
at org.mongodb.scala.Observer.onSubscribe$(Observer.scala:85)
at org.mongodb.scala.internal.SubscriptionCheckingObserver.onSubscribe(SubscriptionCheckingObserver.scala:21)
at com.mongodb.async.client.SingleResultCallbackSubscription.<init>(SingleResultCallbackSubscription.java:33)
at com.mongodb.async.client.Observables$2.subscribe(Observables.java:78)
at org.mongodb.scala.ObservableImplicits$BoxedObservable.subscribe(ObservableImplicits.scala:474)
at org.mongodb.scala.ObservableImplicits$ToSingleObservable.subscribe(ObservableImplicits.scala:433)
at org.mongodb.scala.ObservableImplicits$ScalaObservable.headOption(ObservableImplicits.scala:358)
at org.mongodb.scala.ObservableImplicits$ScalaSingleObservable.toFutureOption(ObservableImplicits.scala:419)

I've tried the solution in this link by adding SomeCodec and adding a new match condition on CodeData,

case Some(v: CodeData) => {
  writer.writeStartDocument()
  writer.writeString(v.code)
  writer.writeInt64(v.expire)
  writer.writeEndDocument()
}

but I've got this error

org.bson.BsonInvalidOperationException: writeString can only be called when State is VALUE, not when State is NAME

Now, I don't know how to do next. Any help is appreciated.

TheOutsider
  • 63
  • 1
  • 10

0 Answers0