给定用户表和评级表

如何使用 Sequelize 包含子句 从用户表中查询在评级表 中没有任何评级记录的所有用户记录

注意:Sequelize 5.x 版

提前致谢

最佳答案

您可以通过两种方式执行此操作,具体取决于您的模型是如何定义的。

1. 使用 Sequelize Eager Loading 获取所有 UsersRatings。然后过滤用户没有任何评级的地方。

const users = Users.findAll({
  include: [Ratings]
});
const filteredUsers = users.filter(user => user.ratings.length === 0);

2. userIds 表中获取所有 Ratings,然后使用 userIds Sequelize operator 将这些 notIn 传递给 where 子句
const ratings = Ratings.findAll({
  attributes: ["userId"],
  group: ["userId"]
});
const userIds = ratings.map(rating => rating.userId);
const filteredUsers = Users.findAll({
  where: {
    userId: { [Op.notIn]: userIds }
  }
});

10-08 18:13