MongoDB necesita un $inc
operador porque:
- Las operaciones atómicas en MongoDB son difíciles sin soporte específico de bajo nivel.
- La interfaz no es lo suficientemente rica como para expresar
c = c + 1
sin un operador especial.
Solo necesitas expresar c = c + 1
con hartes h. Esta tarea es un poco complicada porque las tiendas H usan cadenas tanto para las claves como para los valores y eso te deja con un desastre de casting. Creo que estás atrapado con algo desagradable como esto:
update t
set h = h || hstore('my_counter', ((h -> 'my_counter')::integer + 1)::text)
where mykey = myval
los (h -> 'my_counter')::integer + 1
¿El incremento extrae el valor (h -> 'my_counter'
), lanzarlo a un entero y agregarle uno. Luego construyes un solo elemento HSTORE con hstore('my_counter', ...)
y un explícito ::text
Ejecute el valor para asegurarse de que PostgreSQL sepa qué función desea. Finalmente, concatena el nuevo valor clave en la tienda H-H store original con h || hstore(...)
para reemplazar el valor anterior.
Si no desea usar ese desastre algo desagradable todo el tiempo, entonces podría envolverlo una función simple y decir:
update t
set h = hstore_inc(h, 'my_counter', 1)
where ...
para ocultar la maldad.
Estoy seguro de que hay otras formas de hacerlo (usando los diversos a/desde la matriz Funciones tal vez) pero lo anterior debería funcionar.