问题
I have a Sequelize model called Staff. On it there's an array field described as follows:
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)
},
});
I'm trying to create a GraphQL end point which serves up all staff which don't have 'instructor' in their roles field.
I've read this page of the docs, suggesting that I use a combination of Sequelize.Op. So I created this:
return Staff.findAll({
where: {
roles: {
[Sequelize.Op.not]: {[Sequelize.Op.contains]: ['instructor']},
}
}
}
)
The above throws the error:
"message": "values.map is not a function"
However, if I am to try a query which isn't a combo such as:
return models.Staff.findAll({
where: {
roles: {
[Sequelize.Op.contains]: ['instructor']
}
}
}
)
The query runs properly, this leads me to believe I perhaps have a syntax error or misunderstanding of how Op logic is combined.
回答1:
Try this:
return models.Staff.findAll({
where: {
$not: {
roles: {
$contains: ['instructor'],
},
},
},
})
The clause $not need to be prior than the column you target.
来源:https://stackoverflow.com/questions/52954784/sequelize-does-not-contain-a-string-within-a-postgresql-array-query