Domanda

When trying to bulk load a list of DBObject's via insert, I get 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.

What does this error mean? How can I resolve?

Reference:

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

È stato utile?

Soluzione

The method insert will take any List, but to store the data in Mongo, casbah needs to convert it to DBObject. To do that it uses an implicit conversion, which is available in casbah for various data-types. However the data you are trying to insert does not have a conversion implemented or available in your scope. To solve that either import the implicit converter or implement one.

In your case you may be missing an import. Make sure you got:

import com.mongodb.casbah.Imports._

and try replacing listObjects by MongoDBList(listObjects:_*)

EDIT:

To answer to your comment try in 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))

The :_* will get the elements instead of the list and avoid creating a List of List.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top