Feather.js + Sequelize + postgres 11:如何修补jsonb列?

问题描述 投票:0回答:1

我想用相同的对象更新数据库的几行。假设我有一列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));

[就像documentation from feathers.js所说的,如果我想替换多个记录,我会发送一个等于空的ID。

所以现在出现了问题,如果我这样做,我的列customText将仅包含新对象,但是我想要一个对象数组,因此我想将新数据推送到该数组中。如何修补数据?

我的猜测是使用hook in feathers.jsraw query with sequelize。但是我不确定该怎么做。

postgresql sequelize.js feathersjs
1个回答
0
投票

我不太确定我的回答,但是这个钩子可以正常工作:

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() hook

而且,由于这个问题,我失去了to listening to event的能力

而且我也关心查询,我不确定在||上使用:jsonb_insert是否更好?

© www.soinside.com 2019 - 2024. All rights reserved.