Это, наверное, глупый вопрос, но я новичок в узле и postgresql, поэтому я борюсь.
Я пытаюсь использовать pgp.helpers.insert
для вставки нескольких объектов в базу данных, как pgp.helpers.insert
ниже:
users = [{mycolumn:{name: 'John', age:23}}, {mycolumn:{name: 'Mike', age: 30}}];
query = pgp.helpers.insert(users, ['mycolumn:json'], 'mytable');
// insert into "mytable"("mycolumn") values('{"name":"John","age":23}'),('{"name":"Mike","age":30}')
Код выше вставляет в mytable
2 строки с mycolumn
как jsonb.
Но я пытаюсь вставить прямо в mycolumn
значения внутри массива объектов, не обертывая мой оригинальный объект, например:
users = [{name: 'John', age:23}, {name: 'Mike', age: 30}];
query = pgp.helpers.insert(users, ['mycolumn:json'], 'mytable');
// Error: Property 'mycolumn' doesn't exist.
Конечно, это не работает, поскольку объект не содержит атрибут mycolumn
. Но я думаю, что это не изящно итеративно в моем массиве, обертывая исходный объект с именем столбца, особенно потому, что я работаю с миллионами строк (конечно, работает в пакетах).
Заранее спасибо.
Вы можете использовать следующее определение для своего столбца в соответствии с синтаксисом столбца:
{
name: 'mycolumn',
init: c => c.source // use the source object itself
}
т.е.
const cs = new pgp.helpers.ColumnSet([
{
name: 'mycolumn',
init: c => c.source
}
], {table: 'mytable'});
а затем использовать его:
const query = pgp.helpers.insert(users, cs);
Заметим, что мы не указываем модификатор - mod: ':json'
, потому что мы возвращаем объект из init
, и объекты по умолчанию форматируются как JSON.