将MongoDBObject指定为$ set的内容

时间:2014-08-27 18:54:21

标签: mongodb scala casbah

我需要构建一个这样的更新查询:

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

我只是不知道怎么用Cashbah来做。这是$ set的值,我是从JSON String(我解析为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,同样的事情。

先谢谢你的帮助! 拉嘎

1 个答案:

答案 0 :(得分:2)

非常接近$set会占用字段(String, A)*的varargs,所以这会有效:

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

或者,您可以选择退出$set部分的dsl:

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