在子阵列上使用"where"和"in"时的Sequelize错误

spo*_*rts 29 node.js sequelize.js

这是我的模型定义:

var Tag = sequelize.define('Tag', {
    name: Sequelize.STRING
});

var Event = sequelize.define('Event', {
    name: Sequelize.STRING,
});

Event.hasMany(Tag, {as: 'tags', through: 'event_tags', foreignKey: 'eventId'});
Tag.hasMany(Event, {as: 'events', through: 'event_tags', foreignKey: 'tagId'});
Run Code Online (Sandbox Code Playgroud)

用语言来说就是:有事件和标签.事件标记有许多标记.

我正在尝试运行此查询:

Event
.findAndCountAll({
    include: [{model: Tag, as: 'tags'}],
    where: {'tags.id': {in: [1,2,3,4]}},
    order: order,
    limit: pageSize,
    offset: pageSize * (page - 1),
})
.success(function(result) {

    ...
});
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

   \node_modules\sequelize\lib\dialects\abstract\query-generator.js:1134
          var logicResult = Utils.getWhereLogic(logic, hash[key][logic]);
                                                                ^
   TypeError: Cannot read property 'in' of undefined
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我在"in"表达式之前使用过,例如:

 Tag
 .find({
      where: {id: {in: [1,2,3,4]}}
 }).success(...)
Run Code Online (Sandbox Code Playgroud)

它运作得很好.

我从来没有使用带有子数组的in表达式,就像在这种情况下一样.所以我不知道这是不是正确的做法.

小智 92

不需要"in"属性,sequelize auto定义这个.只需设置数组.

Tag.findAll({
    where: {
        id: [1,2,3,4]
    }
}).then(...)
Run Code Online (Sandbox Code Playgroud)


Bra*_*rad 20

Sequelize v5 的更新示例:

await Tag.findAll({
  where: {
    id: {
      [Sequelize.Op.in]: [1, 2, 3, 4]
    }
  }
});
Run Code Online (Sandbox Code Playgroud)