簡體   English   中英

MongoDB Casbah for Scala上的編譯錯誤

[英]Compilation error on MongoDB Casbah for Scala

我正在編寫有關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基礎知識?

這是由於dsl的實現方式以及$each的鏈接。 核心問題是我認為$ addToSet不會按預期合並::

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

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

似乎MongoDBObject ++沒有遞歸合並。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM