具有泛型的ReactiveMongo:“含糊的隐式值”

问题描述 投票:0回答:1

我不确定这个错误的来源。我正在尝试从旧的.find()方法进行迁移,可以在其中传递Pattern: query: BSONDocument来查找并调用它。效果很好,但是我想遵循建议。

但是,我有一种创建通用数据库访问对象的愿望,这引起了一些麻烦……请看下面。

我正在尝试从中读取的对象:

.one[T]

包含我要执行的方法的类(忽略package Models import reactivemongo.api.bson.{BSONDocumentHandler, Macros} case class Person(name: String) object Person { implicit val handler: BSONDocumentHandler[Person] = Macros.handler[Person] } 等)

Await

我如何尝试获取它(忽略package Data import reactivemongo.api.AsyncDriver import reactivemongo.api.bson._ import reactivemongo.api.bson.collection.BSONCollection import reactivemongo.api.commands.WriteResult import scala.concurrent.{Await, Future} import scala.concurrent.duration._ import scala.reflect.ClassTag object DataService extends DataService trait DataService { implicit val ec: scala.concurrent.ExecutionContext = scala.concurrent.ExecutionContext.global private val driver = new AsyncDriver private val connection = Await.result(driver.connect(List("localhost:32768")), 10.seconds) private val database = Await.result(connection.database("database"), 10.seconds) private def getCollection[T]()(implicit tag: ClassTag[T]): BSONCollection = database.collection(tag.runtimeClass.getSimpleName) def Get[T]()(implicit handler: BSONDocumentHandler[T], tag: ClassTag[T]): Future[Option[T]] = { val collection = getCollection[T] collection.find(BSONDocument("name" -> "hello"), Option.empty).one[T] } } ,这只是出于测试目的):

Await

我得到的错误:

val personName = Await.result(dataService.Get[Person](), 10.seconds).map(_.name).getOrElse("Not found")

谢谢大家的帮助。

mongodb scala reactivemongo
1个回答
0
投票

尝试在第二个参数查找方法中向选项添加类型,例如:

Error:(32, 19) ambiguous implicit values:
 both object BSONDocumentIdentity in trait BSONIdentityHandlers of type reactivemongo.api.bson.package.BSONDocumentIdentity.type
 and value handler of type reactivemongo.api.bson.BSONDocumentHandler[T]
 match expected type collection.pack.Writer[J]
   collection.find(BSONDocument("name" -> "hello"), Option.empty).cursor[T]
© www.soinside.com 2019 - 2024. All rights reserved.