如何在 nodejs 中使用 sequelize 编写嵌套查询

How to write nested queries using sequelize in nodejs

我正在尝试使用此查询的 sequelize 编写嵌套查询。


const userIdPriorityLevel = await db.sequelize.query(
            `select "p_level" from roles  where id=(select "roleId" from users where id='${userId}');`
            , { raw: true });

上面的查询是这样工作的

用户table

id   roleId
1     2
2     3

角色table

id   p_level
2     4324
3     3423

请帮助如何做到这一点。

更新:


        const userIdPriorityLevel = await db.Role.findAll({
            attributes: ['p_level'],
            include: [{
                model: db.User,
                required: true,
                attributes: [],
                where: {
                    id: userId
                }
            }
            ]
        })

        console.log("userid   ", userIdPriorityLevel)

当我打印上面的查询时,它给了我这个输出

userid    [
  role {
    dataValues: { p_level: 700 },
    _previousDataValues: { p_level: 700 },
    _changed: Set(0) {},
    _options: {
      isNewRecord: false,
      _schema: null,
      _schemaDelimiter: '',
      include: [Array],
      includeNames: [Array],
      includeMap: [Object],
      includeValidated: true,
      attributes: [Array],
      raw: true
    },
    isNewRecord: false
  }
]

我只想从上面的输出中提取这个 p_level: 700 值。尝试这样的事情

  const userPriorityLevel = userIdPriorityLevel[0][0]['p_level']

但它不起作用。

考虑到你也有 Role.hasMany(User) 关联,你可以尝试这样的事情:

const roles = await Roles.findAll({
  attributes: ['p_level'],
  include: [{
    model: User,
    required: true,
    attributes: [],
    where: {
      id: userId
    }
  }
  ]
})

更新: 从每个模型实例的 Sequelize 查询调用 get({ plain: true }) 中获取普通对象:

const plainRoles = roles.map(x => x.get({ plain: true }))