Sequelize:查询字符串在字符串数组中postgresql

时间:2017-08-24 15:06:08

标签: postgresql sequelize.js

我正在尝试在sequelize中执行查询,我只希望获得具有正确角色的用户。角色存储为字符串数组。例如['student']['school_owner', 'admin']

在这种特殊情况下,我实际上是想找一所学校,并包括该学校的学校老板。失败的相关查询是

const ownerQuery: { [key: string]: any } = {};
ownerQuery.roles = {$in: ["{school_owner}"]};

School
  .findById(req.params.id,{include: [{ model: User, where: ownerQuery }]})
  .then((school: School | null) => {
    if (school === null) {
      res.status(404).json({message: "Not Found"})
    } else {
      res.json(school)
    }
  }, (error) => next(error))

sequelize将数组值存储为类似{school_owner, admin}的内容。 documentation表示我可以使用以下内容代替我的$in查询

ownerQuery.roles = {$in: ["school_owner"]};

删除了{},但却出现Array value must start with "{" or dimension information.'错误。

在第一个示例中,查询没有失败,但它也不像$in查询那样工作。我必须完全匹配roles的内容。例如,如果用户同时拥有adminschool_owner个角色,我必须说

ownerQuery.roles = {$in: ["{school_owner, admin}"]};

执行$in查询的正确方法是什么,以便我可以匹配具有特定角色的所有用户?

1 个答案:

答案 0 :(得分:0)

实现此功能的正确方法是执行以下操作

ownerQuery.roles = { $contains: ["school_owner"] };

这将返回school_owner

数组中角色为roles的所有用户