I'm using sequelize (v3.12.2), with pg (4.4.3), PostgreSQL (v9.4), and Node (v4.1.2).
I have a model that inlcudes a JSONB data type field.
var User = {
data: {
type: Sequelize.JSONB
}
Now I can do
User.findOne({where: {id: 12345}})
.update({data: {x: 'foo'}});
And
User.findOne({where: {id: 12345}})
.update({'data.y': 'bar'});
Now, if I want to delete just the data.x
property how can I do it in one command?
User.findOne({where: {id: 12345}})
.update({'data.x': null});
Obviously doesn't work. In fact, the resulting data object should be:
{y: 'bar'}
And not:
{x: null, y: 'bar'}
How can I do this with Sequelize? Thanks for your help!
If @Tarun Lalwani's code does not work, probably Your postgresql 9.4 does not support "-" operation.
In that case, creating function or upgrade to 9.5+ would be your option.
See PostgreSQL: Remove attribute from JSON column
I think below should work
User.findOne({where: {id: 12345}})
.update({'data': sequelize.literal("data - 'x' ")});
Have not tested it, but if it doesn't work let me know. The solution will be along these lines only
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With