1

我希望 Sequelize 将 ID 不在数组中的所有值返回给我。

如果 $notIn 的值是一个空数组,Sequelize 不会返回任何内容,但如果数组包含一个空值,它会返回我。

这没有给我任何回报:

  db.foo.findAll({
    where: {
      id: {
        $notIn: [] 
      }
    }
  });

这会返回我的每个值:

  db.foo.findAll({
    where: {
      id: {
        $notIn: [''] 
      }
    }
  });

如果数组为空,为什么它不返回所有值?如果它为空,则意味着应返回不在该数组中的所有值。由于 ID 不包含任何值,sequelize 应该将所有值返回给我,对吗?

4

2 回答 2

4

此问题将在 Sequelize 版本 4 中修复。不过,该版本尚未完全公开。至少还没有文档。

请参阅https://github.com/sequelize/sequelize/issues/4859上的 GitHub 问题。

可以在https://github.com/sequelize/sequelize/blob/master/changelog.md找到更改日志。它说

[已修复] $notIn: [] 现在转换为 NOT IN (NULL) #4859

也许您可以自己在当前代码中实现这些版本 4 更改。

于 2016-06-28T21:14:41.277 回答
0

对于那些使用 < 4 版本的人,这是我使用的解决方法,

let idsToSkip = [...]; //generate array of ids, this may result in empty array
idsToSkip.push('-1'); // push a value that can not be the id in table. this will generate `not in ('-1')` query serving the purpose.
db.foo.findAll({
  where: {
    id: {
      $notIn: idsToSkip
    }
  }
});

希望能帮助到你 !!

于 2017-10-26T06:48:29.363 回答