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/