1

I am trying to write function that writes data to MongoDB using Casbah toolkit:

  import com.mongodb.casbah.WriteConcern
      import ...

  def saveRecord(rec: MongoDBObject) {
    mongoColl.insert(rec, WriteConcern)
  }

Casbah defines WriteConcern as a Scala object. I get the following errors:

No implicit view available from Object => com.mongodb.casbah.Imports.DBObject.  

not enough arguments for method insert: (implicit dbObjView: Object => com.mongodb.casbah.Imports.DBObject, implicit concern: com.mongodb.WriteConcern, implicit encoder: com.mongodb.casbah.Imports.DBEncoder)com.mongodb.casbah.Imports.WriteResult. Unspecified value parameter dbObjView.   

Also when I try simply instantiate WriteConcern:

    val wc:WriteConcern = WriteConcern

I get this error:

    not found: type WriteConcern

I have import com.mongodb.casbah.WriteConcern in first lines of my code, why it is not found? How can I instantiate WriteConcen? Thanks!

Anton Ashanin
  • 1,817
  • 5
  • 30
  • 43
  • It looks like `insert` is a curried function with 3 implicit parameters, `dbObjView, concern, encoder` - from the error it looks like `dbObjView: com.mongodb.casbah.Imports.DBObject` isn't defined. – Boris the Spider Mar 29 '13 at 19:55
  • Alas, adding `import com.mongodb.casbah.Imports.DBObject` has not helped. – Anton Ashanin Mar 29 '13 at 20:19
  • You probably need to define an `implicit val` of that type, it will then be substituted into the `implicit` parameter. – Boris the Spider Mar 29 '13 at 20:22

1 Answers1

2

Add an import for the necessary implicit and insert like this:

import com.mongodb.casbah.Imports._
mongoColl.insert(rec)

On your question about not being able to instantiate WriteConcern, it's because there's a class under com.mongodb and there's an enum-like object under com.mongodb.casbah. This will work:

import com.mongodb.casbah.WriteConcern
val wc: com.mongodb.WriteConcern = WriteConcern.Normal
Alex Yarmula
  • 10,477
  • 5
  • 33
  • 32
  • No way. When I try to `mongoColl.insert(rec)` I get these errors: 1) No implicit view available from com.mongodb.casbah.commons.MongoDBObject => com.mongodb.casbah.Imports.DBObject. 2) not enough arguments for method insert: (implicit dbObjView: com.mongodb.casbah.commons.MongoDBObject => com.mongodb.casbah.Imports.DBObject, implicit concern: com.mongodb.WriteConcern, implicit encoder: com.mongodb.casbah.Imports.DBEncoder)com.mongodb.casbah.Imports.WriteResult. Unspecified value parameter dbObjView. – Anton Ashanin Mar 31 '13 at 09:26
  • Adding this import: `import com.mongodb.casbah.Imports._` will help. Once I added that, It compiled with no errors. – Alex Yarmula Mar 31 '13 at 12:48