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 ...
厄介さを隠すために。
私はそれをする他の方法があると確信しています(さまざまなものを使用して アレイへ/から おそらく関数)しかし、上記は機能するはずです。