首页 > 解决方案 > Sequelize 查询子结构

问题描述

我想在 Sequelize 中查询子结构时遇到问题:

我有用户类和专辑类,用户可以有很多专辑。

如果我想查询用户是否有一张专辑,它适用于:

user.findAll({include: { model: album, where: { band: 'Metallica', title: 'Master of Puppets'} } })

一旦我想知道用户是否有两个或更多特定专辑,问题就会出现。所以我需要的是:“连接专辑的数组包含专辑A和专辑B。”

我试过了:

user.findAll({include: { model: album, where: {[Op.and]: [{ band: 'Metallica', title: 'Master of Puppets'}, {band: 'Iron Maiden', title: 'Fear of the Dark' }] } } })

但这似乎在错误的级别上应用了“和”并将其变成:band ='Metallica' 和 band='Iron Maiden',这当然永远不会返回任何东西。所以我有点难以弄清楚如何在正确的水平上应用“和”。

因为我正在查询 pg,所以我还尝试了“任何”或“包含”运算符,但它们似乎只适用于普通数组而不是对象数组。

user.findAll({where: {album: {[Op.contains]: [{ band: 'Metallica', title: 'Master of Puppets'}, {band: 'Iron Maiden', title: 'Fear of the Dark' }] } } })

总是抛出一个错误,说 {band: 'Metallica', title: 'Master of Puppets'} 是无效值。“Op.any”和“Op.contained”也是如此。

user.findAll({where: {album: {[Op.and]: [{[Op.any]: { band: 'Metallica', title: 'Master of Puppets'}}, {[Op.any]:{band: 'Iron Maiden', title: 'Fear of the Dark' }}] } } })

失败,因为“Op.any”也不能将对象作为输入,说 {band: 'Metallica', title: 'Master of Puppets'} 是无效值

有谁知道解决方案?

标签: node.jssequelize.js

解决方案


尝试使用 [Op.or] 这应该给你 band ='Metallica' 或 band='Iron Maiden' 所以拥有 band metala 或 band iron maiden 的用户会出现


推荐阅读