我有以下POSTGRESQL表
id | name | email | weightsovertime | joined
20 | Le | le@gmail.com | [] | 2018-06-09 03:17:56.718
我想知道如何将数据(JSON对象或仅对象)推送到weightsovertime数组中。
由于我正在制作后端服务器,我想知道执行此操作的KnexJS查询。
我尝试了以下语法,但它不起作用
update tableName set weightsovertime = array_append(weightsovertime,{"weight":55,"date":"2/3/96"}) where id = 20;
谢谢
答案 0 :(得分:0)
array_append
适用于原生arrays - jsonb
列中的JSON数组不同。
假设您的weightsovertime
是jsonb
(或json
),则必须使用concatenation operator:||
例如:
update the_table
set weitghtsovertime = weightsovertime||'[{"weight": 55, "date": "1996-03-02"}]'
where id = 20;
答案 1 :(得分:0)
对于碰巧遇到此问题的任何人,使用Knex.js的解决方案是:
knex('table')
.where('id', id)
.update({
arrayColumn: knex.raw(`arrayColumn || ?::jsonb`, JSON.stringify(arrayToAppend))
})
这将产生如下查询:
update tableName
set weightsovertime = arrayColumn || $1::json
where id = 20;
$1
将替换为JSON.stringfy(arrayToAppend)
的值。请注意,由于limitation of the Postegre drive