如果 $notIn 的值为空数组,Sequelize 不会 return 任何内容,但如果数组包含空值,它会 return 告诉我

Sequelize doesn't return anything if value for $notIn is an empty array but it returns me if array contains an empty value

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

如果 $notIn 的值是一个空数组,Sequelize 不会 return 任何东西,但如果数组包含一个空值,它 return 会告诉我。

这return对我来说没什么:

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

这 return 是我的每一个值:

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

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

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

https://github.com/sequelize/sequelize/issues/4859 查看 GitHub 问题。

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

[FIXED] $notIn: [] is now converted to NOT IN (NULL) #4859

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

对于那些使用 < 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
    }
  }
});

希望对您有所帮助!!