我需要构建一个这样的更新查询:
{
$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,同样的事情。
先谢谢你的帮助! 拉嘎
答案 0 :(得分:2)
非常接近$set
会占用字段(String, A)*
的varargs,所以这会有效:
$set(setVal.toSeq: _*) ++ $setOnInsert("a" -> 3)
或者,您可以选择退出$set
部分的dsl:
MongoDBObject("$set" -> setVal) ++ $setOnInsert("a" -> 3)