Sequelize 1:M关系:查询association.column = value的位置

时间:2017-09-24 08:59:25

标签: node.js postgresql sequelize.js

我有两种型号:产品 Pin 。 Pin模型有一个属性:

var Pin = sequelize.define("pin", {
    account_name: {type: Sequelize.STRING, allowNull: false}
});

我已经设置了1对多的关系:

Product.hasMany(Pin, {as: 'pins'});

我想做什么

现在,我试图查询产品,其中相关的引脚(如果存在)不包含account_name属性等于特定值的引脚(让我们说&& #34;你好"。)

换句话说,如果我运行查询,我希望所有产品不带任何关联的引脚和所有现有关联引脚的产品。 account_name属性与定义的值不匹配(我们正在使用" hello")

我尝试了什么

models.Product.findAll({
    where: {
        is_published: true
    },
    include: [
        {
            model: models.Pin,
            as: 'pins',
            where: {
                account_name: {$not: 'hello'}
            }
        },
    ]
});

现在,如果没有任何相关的引脚或者只有相关的引脚具有不需要的值(这是好的),此解决方案不会返回产品。 如果它确实有其他Pins与其他account_name值,那么它将返回Product,而其他Pins 即使其中一个Pins包含不需要的值!那不是我想要的。

所以我觉得我需要在产品级别将where: { account_name: {$not: 'hello'} }条件提升一级,才能实现。我猜是像

这样的东西
where: {
    is_published: true,
    'pins.pin.account_name': {$not: 'hello'}
}

但到目前为止,我一直在谷歌搜索和尝试各种奇怪的事情,没有任何工作。

有人可以建议吗?谢谢!

0 个答案:

没有答案