Tag: jsonb

如何使用Sequelize在JSONB字段上创buildUNIQUE约束

我在NodeJS中使用Sequelize ORM来pipe理postgreSQL数据库。 我在我的表中使用JSONB数据types,我需要JSONB字段上的索引和此JSON属性上的唯一约束。 如果我必须在这里做一个经典的SQL我的脚本: CREATE TABLE tableJson (id SERIAL PRIMARY KEY, content JSONB NOT NULL); CREATE INDEX j_idx ON tableJson USING gin(content jsonb_path_ops); CREATE UNIQUE INDEX content_name_idx ON tableJson(((content->>'name')::varchar)); 我发现如何使用INDEX创build表,但不知道如何处理UNIQUE约束。 以下是我的脚本示例: var tableJson = sequelize.define('tableJson', { content: Sequelize.JSONB }, { indexes: [{ fields: ['content'], using: 'gin', operator: 'jsonb_path_ops' } }); 有没有解决我的问题? 如果没有,我可能会使用sequelize.query方法来执行原始查询,但这不是非常演变。 任何帮助,将不胜感激!

在postgres jsonb数组中find对象的位置

我有一个在表的jsonb value列中看起来像这样的对象数组: "west": [ {"id": "aa92f346-7a93-4443-949b-4eab0badd983", "version": 1}, {"id": "cd92e346-6b04-3456-050a-5eeb0bddd027", "version": 3} ] 我打算从这个数组中删除某些对象的ID和版本,如下所示: SELECT value::jsonb #- '{west, 1}' FROM game.settings; 然而, 1不应该被硬编码,而是应该等于数组中匹配我所寻找的id和版本的对象的位置(在本例中为"id": "cd92e346-6b04-3456-050a-5eeb0bddd027", "version": 3 )。 我将如何去确定这个数组的位置,并将其传递到硬编码1当前拥有的位置?

Sequelize:删除JSONB属性(使用PostgreSQL)

我使用sequelize (v3.12.2), pg (4.4.3), PostgreSQL (v9.4)和Node (v4.1.2)。 我有一个包含JSONB数据types字段的模型。 var User = { data: { type: Sequelize.JSONB } 现在我可以做 User.findOne({where: {id: 12345}}) .update({data: {x: 'foo'}}); 和 User.findOne({where: {id: 12345}}) .update({'data.y': 'bar'}); 现在,如果我想删除data.x属性,我怎样才能在一个命令? User.findOne({where: {id: 12345}}) .update({'data.x': null}); 显然不行。 实际上,由此产生的数据对象应该是: {y: 'bar'} 并不是: {x: null, y: 'bar'} 我怎么能用Sequelize做到这一点? 谢谢你的帮助!