Scala的MongoDB Casbah上的编译错误

Scala的MongoDB Casbah上的编译错误,mongodb,scala,casbah,Mongodb,Scala,Casbah,我正在写一个关于Scala和Cashbah的更新查询。当我写这个的时候 val query = MongoDBObject({"_id" -> uri.toString}) val update: DBObject = $set("uDate" -> new DateTime) ++ $addToSet("appearsOn") $each(sourceToAppend:_*) ++ $addToSet("hasElements") $each(elementsToAp

我正在写一个关于Scala和Cashbah的更新查询。当我写这个的时候

val query = MongoDBObject({"_id" -> uri.toString})

val update: DBObject =
  $set("uDate" -> new DateTime) ++
  $addToSet("appearsOn") $each(sourceToAppend:_*) ++
  $addToSet("hasElements") $each(elementsToAppend:_*) ++
  $addToSet("hasTriples") $each (triplesToAppend:_*)

OntologyDocument.dao.collection.update(query, update, upsert = true)
…它给了我这样一个编译错误。但是如果我这样写的话

No implicit view available from Object{def $each(target: Array[Any]): com.mongodb.casbah.commons.Imports.DBObject; def $each(target: Any*): com.mongodb.casbah.commons.Imports.DBObject} => com.mongodb.casbah.commons.Imports.DBObject.
…然后它成功编译并运行

val query = MongoDBObject({"_id" -> uri.toString})

val setOps1 = $addToSet("appearsOn") $each(sourceToAppend:_*)
val setOps2 = $addToSet("hasElements") $each(elementsToAppend:_*)
val setOps3 = $addToSet("hasTriples") $each (triplesToAppend:_*)

val update: DBObject = $set("uDate" -> new DateTime) ++ setOps1 ++ setOps2 ++ setOps3

OntologyDocument.dao.collection.update(query, update, upsert = true)
我不明白

为什么第一个不编译,或者第二个不编译?


我是否缺少Scala basic?

这是由于dsl的实现方式和
$each
的链接造成的。核心问题是我认为$addToSet不会像预期的那样合并:

val setOps1 = $addToSet("appearsOn") $each(sourceToAppend:_*)
val setOps2 = $addToSet("hasElements") $each(elementsToAppend:_*)
setOps1 ++ setOps2

DBObject = { "$addToSet" : { "hasElements" : { "$each" : [ "another" , "list"]}}}

MongoDBObject++似乎没有递归合并。

sourceToAppend、elementsToAppend和triplesToAppend的值是什么?它们是
sourceToAppend:List[String]
elementsToAppend:List[String]
triplesToAppend:List[ObjectId]
所有默认值均为
Nil
ObjectId
is
com.mongodb.casbah.commons.TypeImports#ObjectId