node.js - Sequelize where has NOT

标签 node.js sequelize.js

我有一个 Article Sequelize 模型,其中文章相互关联。有些文章是其他文章的翻译副本。关系是这样设置的:

var Article = sequelize.define('Article', {
    type                : DataTypes.ENUM('source', 'translated'),
    sourceArticleId     : DataTypes.INTEGER
});

db.Article.hasMany(db.Article, {
    foreignKey: 'sourceArticleId',
    as        : 'TranslatedArticles'
});

所以,一篇 type = 'source' 的文章可以有很多 translatedArticles 其中 type = 'translated'

现在,我要查询所有没有翻译的source文章。

基于 an issue at the Sequelize project github ,这将是这样完成的:

Article.findOne({
    where: Sequelize.literal('translatedArticles.sourceArticleId IS NULL'),
    include: [
        {
            model: Article,
            as   : 'TranslatedArticles'
        }
    ]
});

但是当我运行它时,我得到:

SequelizeDatabaseError:ER_BAD_FIELD_ERROR:“where 子句”中的未知列“translatedArticles.sourceArticleId”

我也尝试过命名的变体,包括 TranslatedArticles.sourceArticleIdarticles.sourceArticleIdArticles.sourceArticleId

我错过了什么吗?

请注意,我通过使用文字 NOT EXISTS 查询来临时解决此问题,如下所示:

Article.findOne({
    where: Sequelize.literal('NOT EXISTS (SELECT id FROM Articles WHERE Article.id = Articles.sourceArticleId LIMIT 1)')
});

最佳答案

我不知道您在后端使用的是什么数据库技术,但我猜它是区分大小写的。我相信它没有找到该字段,因为您需要将已翻译文章中的 t 大写。这应该有效:

Article.findOne({
    where: Sequelize.literal('TranslatedArticles.sourceArticleId IS NULL'),
    include: [
        {
            model: Article,
            as   : 'TranslatedArticles'
        }
    ]
});

关于node.js - Sequelize where has NOT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397271/

相关文章:

javascript - 返回单个数组

mysql - 如何在 Sequelize 中创建必填字段?

mysql - Sequelize 错误 : Include unexpected. 元素必须是模型、关联或对象

node.js - 与解构一起使用的 Sinon stub 函数

javascript - 如何在 Node js 中使用 bitcoinjs-lib 接收比特币支付

mysql - 在 Sequelize 中的连接表上使用函数

javascript - 将 Sequelize promise 嵌入到 javascript async/await 链中

node.js - Sequelize Tedious 从十进制中去除 0

python - Tensorflow 服务客户端/Base64 问题/错误 3

node.js - 如何使用express和typeorm正确更新实体