加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL hstore中的原子增量,如MongoDB中的$inc

发布时间:2020-12-13 15:59:59 所属栏目:百科 来源:网络整理
导读:新的pg hstore看起来很棒 http://www.postgresql.org/docs/devel/static/hstore.html 但似乎不像MongoDB那样支持原子增量? db.mycoll.update({mykey: myval},{my_counter: {$inc: 1}}) 如何使用PostgreSQL Hstore执行此操作? 解决方法 MongoDB需要$inc运算
新的pg hstore看起来很棒

http://www.postgresql.org/docs/devel/static/hstore.html

但似乎不像MongoDB那样支持原子增量?

db.mycoll.update({mykey: myval},{my_counter: {$inc: 1}})

如何使用PostgreSQL Hstore执行此操作?

解决方法

MongoDB需要$inc运算符,因为:

>如果没有特定的低级支持,MongoDB中的原子操作很困难.
>界面不够丰富,无法在没有特殊操作符的情况下表达c = c 1.

你只需要用hstores表达c = c 1.这个任务很复杂,因为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(‘my_counter’,…)构建单个元素hstore,并在值上显示一个显式的:: text,以确保PostgreSQL知道您想要哪个函数.最后,使用h ||将新键值连接到原始hstore hstore(…)替换旧值.

如果你不想一直使用那种有点讨厌的混乱,那么你可以将它包装成一个简单的函数并说:

update t
set h = hstore_inc(h,'my_counter',1)
where ...

隐藏肮脏.

我确信还有其他方法可以做到(使用各种to/from array函数)但上面的方法应该可行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读