我需要为一个属性增加嵌入对象值的计数,如果不存在对象属性,则创建该对象属性,如果没有,则创建整个记录,在Scala中使用Casbah for MongoDB。如果可能的话,也有兴趣直接在Mongo中了解如何做到这一点。
例如,如果集合中没有对象,请首先添加具有给定_id
的记录,以及属性a
的vals
默认值1
中的对象。这个查询不起作用,但看起来像我预期的那样:
import com.mongodb.casbah.Imports._
coll.update(MongoDBObject("_id" -> "obj1"), $inc("vals" -> Map("a" -> 1)), true, false)
这将导致以下记录:
{ "_id" : "obj1", "vals" : { "a" : 1} }
现在向vals
:中追加一个新对象
coll.update(MongoDBObject("_id" -> "obj1"), $inc("vals" -> Map("b" -> 1)), true, false)
收益率:
{ "_id" : "obj1", "vals" : { "a" : 1, "b" : 1 } }
最后,使用与前一步完全相同的查询:,对vals
的b
属性的值进行追加/递增
coll.update(MongoDBObject("_id" -> "obj1"), $inc("vals" -> Map("b" -> 1)), true, false)
收益率:
{ "_id" : "obj1", "vals" : { "a" : 1, "b" : 2 } }
结果证明非常简单:
coll.update(MongoDBObject("_id" -> "obj1"), $inc("vals.a" -> 1), true, false)