ReactiveMongo/Play:`LastError:DatabaseException ['<none>']`,而db仍然更新

Mic*_*nai 1 scala mongodb reactivemongo

奇怪的问题:当我的播放应用程序尝试在使用reactivemongo时插入/更新来自某些mongoDB集合的记录时,操作似乎失败了一个神秘的消息,但实际上,记录插入/更新了.

更多信息:

  1. 从mongo控制台插入有问题的集合效果很好
  2. 阅读所有收藏品效果很好
  3. 读取和写入同一数据库中的其他集合效果很好
  4. 写给过去工作的有问题的集合.

错误信息是:

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[LastError: DatabaseException['<none>']]]
  at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:280)
  at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206)
  at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100)
  at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99)
  at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344)
  at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343)
  at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
  at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70)
  at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40)
  at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248)
Caused by: reactivemongo.api.commands.LastError: DatabaseException['<none>']
Run Code Online (Sandbox Code Playgroud)

使用ReactiveMongo 0.11.14,Play 2.5.4,Scala 2.11.7,MongoDB 3.4.0.

谢谢!

更新 - 神秘感增厚!

根据@ Yaroslav_Derman的回答,我添加了一个.recover条款,如下:

collectionRef.flatMap( c =>
  c.update( BSONDocument("_id" -> publicationWithId.id.get), publicationWithId.asInstanceOf[PublicationItem], upsert=true))
  .map(wr => {
    Logger.warn("Write Result: " + wr )
    Logger.warn("wr.inError: " + wr.inError)
    Logger.warn("*************")
    publicationWithId
  }).recover({
  case de:DatabaseException => {
    Logger.warn("DatabaseException: " + de.getMessage())
    Logger.warn("Cause: " + de.getCause())
    Logger.warn("Code: " + de.code)
    publicationWithId
  }
})
Run Code Online (Sandbox Code Playgroud)

recover子句会被调用.这是日志:

[info] application - Saving pub t3
[warn] application - *************
[warn] application - Saving publication     Publication(Some(BSONObjectID("5848101d7263468d01ff390d")),t3,2016-12-07,desc,auth,filename,None)
[info] application - Resolving database...
[info] application - Resolving database...
[warn] application - DatabaseException: DatabaseException['<none>']
[warn] application - Cause: null
[warn] application - Code: None
Run Code Online (Sandbox Code Playgroud)

所以没有原因,没有代码,消息是" '<none>'",但仍然是一个错误.是什么赋予了?

我试图移动到0.12,但这导致了整个应用程序的一些编译错误,而且我不确定这会解决问题.所以我想首先理解什么是错的.

更新#2:迁移到reactive-mongo 0.12.0.问题依然存在.

Mic*_*nai 6

通过降级到MongoDB 3.2.8解决了问题.原来,reactiveMongo 0.12.0 与mongoDB 3.4不兼容.

谢谢所有关注此事的人.