【问题标题】:No Implicit View Available没有可用的隐式视图
【发布时间】:2013-10-04 03:50:52
【问题描述】:

当尝试通过insert 批量加载DBObject 的列表时,我得到no implicit view available

collection.insert(listObjects) // listObjects is a List[DBObject]

[error]Test.scala:139: No implicit view available from List[com.mongodb.casba
h.Imports.DBObject] => com.mongodb.casbah.Imports.DBObject.

这个错误是什么意思?我该如何解决?

参考:

def insert [A] (docs: List[A])(implicit arg0: (A) ⇒ DBObject) : WriteResult

【问题讨论】:

  • 你能做个检查吗?将listObjects 替换为listObjects.asInstanceOf[List[com.mongodb.casba h.Imports.DBObject]]。它会给出同样的错误吗?
  • 同样的错误:[error] Test:139: No implicit view available from List[com.mongodb.casbah.Imports.DBObject] => com.mongodb.casbah.Imports.DBObject.
  • @ViniciusMiana - List[DBObject] 不足以满足该类型(显示为评论)吗?如果没有,请让我知道要添加什么。谢谢。

标签: mongodb scala implicit-conversion implicit casbah


【解决方案1】:

insert方法可以取任意List,但是要在Mongo中存储数据,casbah需要将其转换为DBObject。为此,它使用隐式转换,在 casbah 中可用于各种数据类型。但是,您尝试插入的数据在您的范围内没有实现或可用的转换。要解决这个问题,要么导入隐式转换器,要么实现一个。

在您的情况下,您可能缺少导入。确保你得到:

import com.mongodb.casbah.Imports._

并尝试将listObjects 替换为MongoDBList(listObjects:_*)

编辑:

要回复您的评论,请尝试在 REPL 中:

scala> val a = List(1,2,3,4,5,6)
a: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> List(a:_*)
res0: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> List(a)
res1: List[List[Int]] = List(List(1, 2, 3, 4, 5, 6))

:_* 将获取元素而不是列表,并避免创建列表列表。

【讨论】:

  • 您能告诉我在哪里可以找到隐式转换吗?我希望这个导入能够根据这个 Casbah 教程处理它import com.mongodb.casbah.Imports._。 “它提供了一个 Imports 对象,它可以自动导入您需要的所有内容,包括隐式转换和类型别名到一些常见的 MongoDB 类型”(api.mongodb.org/scala/casbah/2.0/tutorial.html)
  • 是的,我正在使用该导入。
  • 这让我解决了我的问题,但现在我看到了BasicBSONList can only work with numeric keys, not: [_id],这可能是另一篇文章的主题。谢谢
  • 另外,这也有效:collection.insert(MongoDBList(listObjects))。为什么使用:_*
  • @Kevin:获取元素而不是列表,否则您最终将得到一个列表列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
相关资源
最近更新 更多