MongoDB нужен $inc
оператор, потому что:
- Атомные операции в MongoDB сложны без определенной поддержки низкого уровня.
- Интерфейс недостаточно богат, чтобы выразить
c = c + 1
без специального оператора.
Вам просто нужно выразить c = c + 1
с Hstores. Эта задача немного усложняется, потому что Hstores используют строки как для ключей, так и для значений, и это оставляет вам беспорядок кастинга. Я думаю, что ты застрял с чем -то неприятным, как это:
update t
set h = h || hstore('my_counter', ((h -> 'my_counter')::integer + 1)::text)
where mykey = myval
А (h -> 'my_counter')::integer + 1
увеличивает ли увеличение значения (h -> 'my_counter'
), отбрасывая его в целое число и добавляя его к нему. Затем вы строите один элемент Hstore с hstore('my_counter', ...)
и явное ::text
Сделайте на значение, чтобы убедиться, что PostgreSQL знает, какую функцию вы хотите. Наконец, вы объединяете новое значение ключа на оригинальный Hstore с h || hstore(...)
Чтобы заменить старое значение.
Если вы не хотите использовать это немного неприятный беспорядок все время, вы можете обернуть его простую функцию и сказать:
update t
set h = hstore_inc(h, 'my_counter', 1)
where ...
скрыть злобу.
Я уверен, что есть и другие способы сделать это (используя различные в/из массива Возможно, функционирует), но вышеперечисленное должно работать.