Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用“继续”时出现错误;其中;及;在;在子阵列上_Node.js_Sequelize.js - Fatal编程技术网

Node.js 使用“继续”时出现错误;其中;及;在;在子阵列上

Node.js 使用“继续”时出现错误;其中;及;在;在子阵列上,node.js,sequelize.js,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,

这是我的模型定义:

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'});
换句话说,这就是:有事件和标记。事件使用许多标记进行标记

我正在尝试运行此查询:

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) {

    ...
});
但我得到了一个错误:

   \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
我做错了什么

我以前使用过“in”表达式,例如:

 Tag
 .find({
      where: {id: {in: [1,2,3,4]}}
 }).success(...)
而且效果很好。

不过,我从未将in表达式与子数组一起使用过,就像在本例中一样。所以我不知道这样做是否正确。

不需要“in”属性,sequelize自动定义它。只需设置数组

Tag.findAll({
    where: {
        id: [1,2,3,4]
    }
}).then(...)

将中替换为
$in

where : { id : { $in : [1,2,3,4]}}

属性中,可以在版本4.42中使用

Tag.findAll({
    where: { id: {in: [1,2,3,4]} }
}).then(...)
您可以对排除的值使用
notIn
属性

Tag.findAll({
    where: { id: {notIn: [1,2,3,4]} }
}).then(...)

更新了Sequelize v5的示例:

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

我知道这是hella old。但我很确定你要找的东西如下。至少其中一个应该能起作用。可能两者都有。我现在无法测试,因为我正处于43档改成意大利面代码野兽的中间。当我找到时间时,我会用实际的测试来更新

(我现在发帖是因为其他人似乎都没有回答我提出的问题,但他们确实回答了我到达这里时的问题。)


我问题中的最后一段代码(您正在“修复”的代码)已经可以了。请阅读整篇文章:)Enxtur,我用findAll试过了,只有这样才能显示该数组中具有id的所有记录。否则,将仅显示id值等于数组中第一个元素值的记录。谢谢你的帮助!它非常有用!findAll({where:{id:[0,1,2,3]}})@这是一个被误解的问题和错误的答案,因为我的英语不好。但我很高兴它对某些人有用:)上面的贡献者(Jaddu)将他们答案中的语法与MongoDB中类似的
$in
操作符混淆了。这与Sequelize提供的
操作符中的
不同,上面的Enxtur提供的答案是正确的解决方案,它完全消除了操作符而支持数组值。他们没有将其与MongoDB混淆,他们的答案在2018年仍然是合理的。“出于向后兼容的原因,Sequelize默认设置以下别名-$eq、$ne、$gte、$gt、$lte、$lt、$not、$in、$notIn…”我在这里寻找其他东西,但这一点很突出。只需确保它是
静态的
方法非对象可访问方法。
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) {

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

    ...
});