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

时间:2018-10-23 17:31:46

标签: javascript postgresql sequelize.js

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

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端点,该端点可以为所有在roles字段中没有“教师”的员工提供服务。

我已阅读this page of the docs,建议我使用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逻辑的组合方式有误解。

2 个答案:

答案 0 :(得分:0)

尝试一下:

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

子句$not必须在您定位的列之前。

答案 1 :(得分:0)

这对我来说很好:

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

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