2013-09-27 33 views
4

當試圖通過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

+0

你能檢查嗎?將'listObjects'替換爲'listObjects.asInstanceOf [List [com.mongodb.casba h.Imports.DBObject]]''。它會給出同樣的錯誤嗎? –

+0

同樣的錯誤:[[error]測試:139:沒有隱式視圖可以從List [com.mongodb.casbah.Imports.DBObject] => com.mongodb.casbah.Imports.DBObject.' –

+0

@ViniciusMiana - 不是'列出[DBObject]'足夠的類型(顯示爲註釋)?如果沒有,請讓我知道要添加什麼。謝謝。 –

回答

5

的方法插入將採取任何名單,而是存儲在蒙戈的數據,卡斯巴需要將其轉換爲DBOBJECT。要做到這一點,它使用隱式轉換,這在casbah中可用於各種數據類型。但是,您嘗試插入的數據沒有在您的範圍內實施或可用的轉換。要解決這個問題,要麼導入隱式轉換器,要麼執行一個。

在您的情況下,您可能會缺少導入。請確保您有:

import com.mongodb.casbah.Imports._ 

,並嘗試通過更換listObjectsMongoDBList(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)) 

:_*將得到元素而不是列表,並避免創建List列表。

+0

你能告訴我在哪裏可以找到隱式轉換嗎?我希望這個導入可以根據這個Casbah教程來處理'import com.mongodb.casbah.Imports._'。 「它提供了一個Imports對象,它可以自動導入您需要的所有東西,包括隱式轉換和類型別名到幾種常見的MongoDB類型」(http://api.mongodb.org/scala/casbah/2.0/tutorial.html) –

+0

是的,我正在使用該導入。 –

+0

這讓我圍繞我的問題,但現在我看到'BasicBSONList只能使用數字鍵,而不是:[_id]',這可能是另一篇文章的主題。謝謝 –

相關問題