2014-08-27 40 views
0

我需要構建一個更新查詢是這樣的:

{ 
    $set: {"yow": 1, "man": 2}, 
    $setOnInsert: {"a": 3}, 
} 

我只是不知道如何使用Cashbah做到這一點。事情就是$ set的值,我從JSON字符串(我將其解析爲MongoDBObject)中得到它。所以我有這樣的代碼:

val setVal = JSON.parse(jsonString).asInstanceOf[MongoDBObject] 
val updateQuery = $set(...) ++ $setOnInsert("a" -> 3) 

我不知道該怎麼把「...」。我想:

val updateQuery = $set(setVal) ++ $setOnInsert("a" -> 3) 

但我得到一個編譯錯誤,說:

type mismatch; found: com.mongodb.casbah.commons.MongoDBObject required: (String, ?) 

我也試過:

val updateQuery = $set(setVal.toSeq) ++ $setOnInsert("a" -> 3) 

得到了類似的錯誤:

type mismatch; found: Seq[(String, AnyRef)] required: (String, ?) 

試圖與toMap,同樣的事情。

在此先感謝您的幫助! 拉嘎

回答

2

非常接近$set採取領域(String, A)*的可變參數所以這將工作:

$set(setVal.toSeq: _*) ++ $setOnInsert("a" -> 3) 

或者,你可以選擇不爲$set一部分DSL :

MongoDBObject("$set" -> setVal) ++ $setOnInsert("a" -> 3)