У меня есть следующая команда Postgres:
UPDATE users SET weightsovertime = weightsovertime || '{"weight":35,"date":"1/9/97"}'::jsonb where id = 20;
и я хотел бы преобразовать его в команду SQL query builder, используя библиотеки, такие как Knex.js.
Я попробовал это:
postgres('users')
.where('id','=',id)
.update({
weightsovertime: weightsovertime +'||' + data + '::jsonb'
})
.returning('weightsovertime')
.then(response => {
res.json(response[0]);
})
.catch(err => res.status(400).json('unable to get entries'));
Но это не сработает, я также попытался обернуть "weightsoverime" в кавычки, но я получил ошибку "не удалось получить записи".
Я бы очень признателен за любую помощь.
С pg-обещанием это будет:
const data = {
id: 20,
weightsovertime: {
weight: 35,
date: '1/9/97'
}
};
db.none('UPDATE users SET weightsovertime = weightsovertime || ${weightsovertime}::jsonb WHERE id = ${id}', data)
.then(() => {
/* success */
})
.catch(error => {
/* failure */
});
С knex (https://runkit.com/embed/3ppka63pplpa):
knex('users').update({
weightsovertime: knex.raw('?? || ?::jsonb', [
'weightsovertime',
JSON.stringify({ weight: 35, date: '1/9/97' })
])
}).where('id', 20)
pg-promise
, то почему такое осложнение? Это просто однострочный запрос сpg-promise
.