Вставить объекты без соответствующего имени столбца

1

Это, наверное, глупый вопрос, но я новичок в узле и 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. Но я думаю, что это не изящно итеративно в моем массиве, обертывая исходный объект с именем столбца, особенно потому, что я работаю с миллионами строк (конечно, работает в пакетах).

Заранее спасибо.

Теги:
pg-promise

1 ответ

1
Лучший ответ

Вы можете использовать следующее определение для своего столбца в соответствии с синтаксисом столбца:

{
  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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню