Upsert с приращением значения встроенного объекта в MongoDB/Casbah/Scala/

Мне нужно увеличить счетчик значения внедренного объекта для свойства или создать свойство объекта, если оно не существует, или создать всю запись, если ее нет, используя Casbah для MongoDB в Scala. Также интересно услышать, как это сделать в Mongo напрямую, если это вообще возможно.

Например, если в коллекции нет объектов, начните с добавления записи с заданным _id и объекта vals со значением по умолчанию 1 для свойства a. Этот запрос не работает, но выглядит примерно так, как я и ожидал:

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 } }

Наконец, вставьте/увеличьте значение свойства b для vals, используя точно такой же запрос, как и на предыдущем шаге:

coll.update(MongoDBObject("_id" -> "obj1"), $inc("vals" -> Map("b" -> 1)), true, false)

Урожайность:

{ "_id" : "obj1", "vals" : { "a" : 1, "b" : 2 } }

person mrjf    schedule 28.11.2012    source источник


Ответы (1)


Оказалось очень просто:

coll.update(MongoDBObject("_id" -> "obj1"), $inc("vals.a" -> 1), true, false)
person mrjf    schedule 28.11.2012