等高线-包含字段总和的地方

问题描述 投票:0回答:1

我有以下型号Test

module.exports = {
    attributes: {
        a: {
            type: 'number'
        },
        b: {
            type: 'number'
        }
    }
}

我想建立一个查询,使我可以将字段ab的总和放在where语句中。

SQL等价物:

SELECT * FROM Test WHERE a + b = myValue

我读了有关Criteria modifiers的Sails文档,但对此一无所知。

有什么聪明的方法吗?当然可以使用native query,但是我想避免这种情况,因为我必须将sum与其他修饰符一起使用。原因是我要从单独的文件中生成动态查询,并且要使用本地查询,我还必须处理已经定义的功能,例如or,and等。

mysql node.js sails.js waterline
1个回答
0
投票

我找到了解决方法。也许对某人有用。这不是严格的解决方案/节点解决方案,但是它是一个数据库,但是它完全适合我的情况。

从MySQL 5.7开始,类似generated columns

生成列是因为这些列中的数据是基于预定义表达式计算的。

我要做的就是向我的Test模型中添加一个额外的自动生成的列:

module.exports = {
    attributes: {
        a: {
            type: 'number',
            columnType: 'int'
        },
        b: {
            type: 'number',
            columnType: 'int'
        },
        c: {
            type: 'number',
            columnType: 'int GENERATED ALWAYS AS(a + b) VIRTUAL'
        }
    }
}

现在我可以执行这样的查询:

const result = await Test.find({ c: 2 })

...我得到正确的结果。 Waterline像对待其他专栏一样对待我的专栏,数据库代替我做一切。

当然,我可以毫无问题地将其与其他修饰符混合使用。

到目前为止,我还没有发现任何并发症。

© www.soinside.com 2019 - 2024. All rights reserved.