我在PostgreSQL数据库中有一个JSONB列,如{lat: value, lon: value}
。我想一次更改任何特定值,例如。 lat,但我不知道如何使用bookshelf.js或knex.js实现这一目标。我尝试使用Postgres文档中指定的jsonb_set()
方法,但我不确定我是否正确使用了它。有人可以建议我怎么做?或者这样做的正确语法是什么?感谢。
答案 0 :(得分:1)
支持在postgresql jsonb列中写入和提取数据的AFAIK唯一基于knex的东西是objection.js ORM。
使用普通的knex,您需要使用raw来编写引用:
knex('table').update({
jsonbColumn: knex.raw(`jsonb_set(??, '{lat}', ?)`, ['jsonbColumn', newLatValue])
})
您可以在https://runkit.com/embed/44ifdhzxejf1
检查生成的SQL最初回答:https://github.com/tgriesser/knex/issues/2264
如何将jsonb_set与knex一起使用的更多示例可以在以下答案中找到
How to update a jsonb column's field in PostgreSQL?
What is the best way to use PostgreSQL JSON types with NodeJS
答案 1 :(得分:0)
使用knex.js更新Jsonb字段
delete(id, files){
return new Promise((resolve, reject)=>{
conn.query(`
DELETE FROM tb_menus WHERE id = ? and photo = ?
`, [
id, files.photo.name
], (err, results)=>{
if(err){
reject(err);
} else {
//fs.unlink(`images/${path.parse(photo).base}`);
resolve(results);
//console.log(results);
}
});
});
}
return knex("tablename").update({
jsonbkey: knex.raw(`
jsonb_set(jsonbkey, '{city}','"Ayodhya"')
`)
}).where({"id" :2020})
将是列名,数据类型为jsonb。
jsonbkey
是表的名称。
tablename
是对象键。
如果存在多个级别的对象,则可以使用点。像city