在 Sequelize 中,我们可以使用集合运算符来查询数据。集合运算符包括 Op.in、Op.notIn、Op.any、Op.all 等,它们可以用于查询符合某些特定条件的数据。
Op.in 和 Op.notIn
Op.in 和 Op.notIn 可以用于查询某个属性是否包含在一个数组中,或者不包含在一个数组中。
例如,我们有一个 users 表,其中有一个 status 属性,它只能取值为 'active' 或 'inactive',我们想要查询所有 status 为 'active' 或 'inactive' 的用户,可以使用 Op.in。
const users = await User.findAll({ where: { status: { [Op.in]: ['active', 'inactive'] } } });
如果我们只想查询 status 不为 'active' 或 'inactive' 的用户,可以使用 Op.notIn。
const users = await User.findAll({ where: { status: { [Op.notIn]: ['active', 'inactive'] } } });
Op.any 和 Op.all
Op.any 和 Op.all 可以用于查询一个属性是否包含一个数组中的任意一个元素,或者包含一个数组中的所有元素。
例如,我们有一个 posts 表,其中有一个 tags 属性,它是一个数组,我们想要查询所有包含 'javascript' 或 'nodejs' 标签的帖子,可以使用 Op.any。
const posts = await Post.findAll({ where: { tags: { [Op.any]: ['javascript', 'nodejs'] } } });
如果我们只想查询同时包含 'javascript' 和 'nodejs' 标签的帖子,可以使用 Op.all。
const posts = await Post.findAll({ where: { tags: { [Op.all]: ['javascript', 'nodejs'] } } });
总结
使用集合运算符可以让我们更方便地查询数据,特别是对于一些包含数组属性的表格。我们可以使用 Op.in、Op.notIn、Op.any、Op.all 等运算符来查询符合特定条件的数据,从而提高我们的开发效率。
示例代码:https://github.com/sequelize/sequelize/blob/master/test/integration/model.test.js#L1449-L1472
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/661201e9d10417a22229584f