【问题标题】:ReactiveMongo custom BSONDocument{ Reader, Writer }ReactiveMongo 自定义 BSONDocument{ Reader, Writer }
【发布时间】:2017-08-24 19:33:57
【问题描述】:

我是 ReactiveMongo 的新手,我想为一个对象创建一个自定义文档读取器/写入器,但我收到了这个错误

type mismatch;  found   :
reactivemongo.bson.BSONDocumentReader[reactivemongo.bson.BSONDocument]
required:
reactivemongo.bson.BSONDocumentReader[db.DataBase.Estudiante]  Note:
implicit object EstudianteReader is not applicable here because it
comes after the application point and it lacks an explicit result type
Error occurred in an application involving default arguments.

这是我的代码,基于我在reactivemongo的官方网页上找到的example

package db

import scala.concurrent.ExecutionContext.Implicits.global

import reactivemongo.api._
import reactivemongo.bson._

object DataBase {

  //Driver para la conexion
  val driver = new MongoDriver

  //Conexion con mongoDB
  val connection = driver.connection(List("localhost"))

  //Conexion con la base de datos AMDB
  val db = connection("reactive")

  //Colección domainNames que se encuentra en la base de datos AMDB
  val collection = db("estudiantes")

  def findAllDomainNames() = {

    val query = BSONDocument()
    collection.find(query).cursor[Estudiante]
    //.cursor[BSONDocument].collect[List]()
  }

case class Estudiante(id: Option[BSONObjectID], nombre: String, apellidos: String, edad: Int)

  object Estudiante {

    implicit object EstudianteWriter extends BSONDocumentWriter[Estudiante] {
      def write(estudiante: Estudiante): BSONDocument = {
        BSONDocument(
          "_id" -> estudiante.id.getOrElse(BSONObjectID.generate),
          "nombre" -> estudiante.nombre,
          "appellidos" -> estudiante.apellidos,
          "edad" -> estudiante.edad.toString)
      }
    }

    implicit object EstudianteReader extends BSONDocumentReader[Estudiante] {
      def read(doc: BSONDocument): Estudiante = {
        Estudiante(
          doc.getAs[BSONObjectID]("_id"),
          doc.getAs[String]("nombre").get,
          doc.getAs[String]("appellidos").get,
          doc.getAs[Int]("edad").get)
      }
    }

  }

  def main(args: Array[String]) {
    println(findAllDomainNames);
  }
}

有什么遗漏/错误?

提前谢谢大家!

【问题讨论】:

    标签: mongodb scala reactivemongo


    【解决方案1】:

    将对象Estudiante的声明移到DataBase上方,并在DataBase范围内添加导入:

    import Estudiante._
    

    【讨论】:

      猜你喜欢
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 2017-11-27
      相关资源
      最近更新 更多