javascript - Sequelize 接收空数组,同时在顶级关联过滤

标签 javascript node.js sequelize.js

Sequelize 版本:6.6.2
语境
我有 3 个模型: User Food UserFoods 。它们之间使用 documentation 具有 super 多对多关系。

const User = sequelize.define('user', {
  username: DataTypes.STRING,
});

const Food = sequelize.define('food', {
  name: DataTypes.STRING
});

const UserFoods = sequelize.define('user_foods', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    allowNull: false
  },
  status: DataTypes.INTEGER,
});

User.belongsToMany(Food, { through: UserFoods });
Food.belongsToMany(User, { through: UserFoods });
User.hasMany(UserFoods);
UserFoods.belongsTo(User);
Food.hasMany(UserFoods);
UserFoods.belongsTo(Food);
UserFoods 中的 status 列将在向用户添加食物时收到一个数字,该数字将用于创建用户食物列表(最喜欢的、好的、糟糕的...)。
这样我就可以这样查询:
const foods = await UserFoods.findAll({
  where: { userId: req.userId, status: 1 },
  include: Food,
});
问题
现在我试图在任何用户列表中查询所有 不是 的食物。我在做以下事情:
const foods = await Food.findAll({
  where: {
    "$user_foods.userId$": { [Op.not]: req.userId },
  },
  include: {
    model: UserFoods,
    duplicating: false,
  },
  limit: 10,
});

// output foods: [] 
为什么我收到一个空数组?
如果我将 Op.not 更改为 Op.eq,它将返回属于该用户的所有食物,那么为什么不反过来呢?

最佳答案

使用 Op.ne 而不是 Op.not

where: {
    "$user_foods.userId$": { [Op.ne]: req.userId },
  },

关于javascript - Sequelize 接收空数组,同时在顶级关联过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67460859/

相关文章:

sequelize.js - 如何使用 Sequelize 处理 RDS 集群中的新副本?

javascript - "containment:parent"工作不正常

javascript - 是否可以在不使用 stroke 的情况下为 SVG 路径设置动画?

javascript - 动态具体化模态

vue.js - 在 vuejs 中导入 sequelize 模型

sequelize.js - Sequelize 中查询结果的双重计数

javascript - 在 Javascript 中验证文本区域会卡住所有文本区域

javascript - ER_BAD_FIELD_ERROR : Unknown column in 'field list'

javascript - 使用 RegExp 在 JavaScript 中拆分字符串,忽略方括号内的定界符

node.js - 获取从 Azure 主题获取消息的订阅客户端中的消息总数