Перо. js + Sequelize + postgres 11: Как пропатчить столбец jsonb? - PullRequest
0 голосов
/ 11 марта 2020

Я бы хотел обновить несколько строк моей БД одним и тем же объектом. допустим, у меня есть столбец customText типа jsonb, который содержит массив объектов

здесь моя модель секвелизации:

  customText: {
    type: DataTypes.JSONB,
    allowNull: true,
    field: "custom_text"
  }

Теперь с клиента я отправляю объект:

const obj = {}        
const data = {
          textid: "d9fec1d4-0f7a-2c00-9d36-0c5055d64d04",
          textLabel: null,
          textValue: null
        };

    obj.customText = data
    api.service("activity").patch(null, obj).catch(err => console.log(err));

Как и в документации от перьев. js сказал, что если я хочу заменить несколько записей, я посылаю идентификатор, равный нулю.

Так что теперь вот проблема, если я делаю что мой столбец customText будет содержать только новый объект, но я хочу массив объектов, поэтому я хочу добавить sh новые данные в массиве. Как я могу исправить данные?

Я предполагаю использовать крючок в перьях. js и необработанный запрос с продолжением . Но я не уверен, как это сделать.

1 Ответ

0 голосов
/ 11 марта 2020

Я не совсем уверен в своем ответе, но этот хук работает:

module.exports = function() {
  return async context => {
    debugger;
    const sequelize = context.app.get("sequelizeClient");
    const customText = JSON.stringify(context.data.customText[0]);
    console.log(customField);
    let query =
      "UPDATE activity SET custom_text = custom_text || '" +
      customText +
      "' ::jsonb";
    console.log(query);

    await sequelize
      .query(query)
      .then(results => {
        console.log(results);
        context.results = results;
      })
      .catch(err => console.log(err));

    return context;

У меня все еще есть проблема, потому что после этого хука в перьях патч продолжится, поэтому он снова обновит мою базу данных .. поэтому я положил disallow () хук .

Кроме того, с этим хуком я потерял способности к прослушиванию события

Также у меня есть Что касается запроса, я не уверен, что лучше использовать: jsonb_insert over ||

...