Javascript Sequelize-在PostgreSQL数组查询中不包含字符串

Javascript Sequelize-在PostgreSQL数组查询中不包含字符串,javascript,postgresql,sequelize.js,Javascript,Postgresql,Sequelize.js,我有一个名为Staff的续集模型。上面有一个数组字段,描述如下: const Staff = sequelize.define("staff", { name: { type: DataTypes.STRING, }, email: { type: DataTypes.STRING, unique: true }, password: { type: DataTypes.STRING,

我有一个名为
Staff
的续集模型。上面有一个数组字段,描述如下:

const Staff = sequelize.define("staff", {
    name: {
        type: DataTypes.STRING,
    },
    email: {
        type: DataTypes.STRING,
        unique: true
    },
    password: {
        type: DataTypes.STRING,
    },
    roles: {
        type: DataTypes.ARRAY(DataTypes.STRING)
    },
});
我试图创建一个GraphQL端点,为所有在其
角色中没有“讲师”的员工提供服务

我读过,建议我结合使用
Sequelize.Op
。所以我创造了这个:

return Staff.findAll({
        where: {
            roles: {
                [Sequelize.Op.not]: {[Sequelize.Op.contains]: ['instructor']},
            }
        }
    }
)
上面的代码抛出错误:

"message": "values.map is not a function"
但是,如果我要尝试一个不是组合的查询,例如:

return models.Staff.findAll({
        where: {
            roles: {
                [Sequelize.Op.contains]: ['instructor']
            }
        }
    }
)
查询运行正常,这使我相信我可能有语法错误或误解了
Op
逻辑的组合方式。

尝试以下方法:

return models.Staff.findAll({
  where: {
    $not: {
      roles: {
        $contains: ['instructor'],
      },
    },
  },
})

子句
$not
必须在目标列之前。

这对我来说很好:

return models.Staff.findAll({
   where: {
    [Sequelize.Op.not]: {
      roles: {
       [Sequelize.Op.contains]: ['instructor'],
      },
    },
  },
})

Sequelize.Op.not
必须在引用的列之前出现。

这是GitHub上报告的:-由于过时而作为问题关闭,最好得到修复。