水线 - 字段总和的位置

Waterline - Where with sum of fields

我有以下型号Test

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

我想构建一个查询,允许我在 where 语句中放入字段 ab 的总和。

SQL 等于:

SELECT * FROM Test WHERE a + b = myValue

我在 sails 文档中读到关于 Criteria modifiers 的内容,但没有任何相关信息。

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

我找到了解决方法。也许对某人有用。 这不是严格的 sails/node 解决方案,而是数据库解决方案,但是,它非常适合我的情况。

从MySQL 5.7开始有类似generated columns的东西。

Columns are generated because the data in these columns are computed based on predefined expressions.

我所要做的就是向我的 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 像对待其他任何专栏一样对待我的专栏,数据库代替我做所有事情。

当然我可以将它与其他修饰符混合使用,没有任何问题。

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