与MongoDB/Casbah/Scala/中嵌入对象值的增量有关



我需要为一个属性增加嵌入对象值的计数,如果不存在对象属性,则创建该对象属性,如果没有,则创建整个记录,在Scala中使用Casbah for MongoDB。如果可能的话,也有兴趣直接在Mongo中了解如何做到这一点。

例如,如果集合中没有对象,请首先添加具有给定_id的记录,以及属性avals默认值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 } }

最后,使用与前一步完全相同的查询:,对valsb属性的值进行追加/递增

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)

最新更新