2014-08-27 30 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)