7

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

2 Answers 2

6

Try this:

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

The clause $not need to be prior than the column you target.

Sign up to request clarification or add additional context in comments.

Comments

2

This worked just fine for me:

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

Sequelize.Op.not have to come before the column that's being reffered to.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.