【问题标题】:Sequelize: how to implement a search based on associated keywords?Sequelize:如何实现基于关联关键字的搜索?
【发布时间】:2017-07-18 17:37:04
【问题描述】:

我希望从数据库中返回与一个或多个关键字相关的所有文章,但我不确定是否有正确的方法来解决这个问题?

我正在使用 Sequelize 3.x 和 node.js 3.7.0。

数据模型如下:

const Article = sequelize.define('article', {
                     ...
                }

const Keyword = sequelize.define('keyword', {
                     name: Sequelize.STRING,
                     lang: Sequelize.STRING  
                }

const ArticleKeyword = sequelize.define('article_keyword', {
                     articleId: Sequelize.INTEGER,
                     keywordId: Sequelize.INTEGER  
                }

(Article).belongsToMany(
    Keyword, { through: ArticleKeyword, as: 'keyword' });

(Keyword).belongsToMany(
    Article { through: ArticleKeyword, as: 'article' });

然后我尝试的查询:

var keywordFilter;
if (req.body.keywords) {
    var keywords = req.body.keywords);
    if (typeof keywords === 'string') {
        keywords = keywords.split(/ *, */);
    }        
    keywordFilter = { name: { $in: keywords } };
}

Article.findAll({
    where: {
        deleted: false                
    },
    include: [{
        model: Keyword,
        as: 'keywords',
        where: keywordFilter,
        attributes: ['name'],
        through: {
            attributes: []
        }
    }]
}).then(function(articles) {
   ...
});

我在这里发现的问题不是只选择具有匹配关键字的文章,而是返回所有文章,然后简单地选择查询中指定的关键字以获得结果。

任何人都可以提出正确的方法吗?

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    你好,可以试试吗

    require:true 
    

    在包含块中进行内部连接和检查

    参考:https://stackoverflow.com/a/31680398/4583460

    【讨论】:

    • 嗯。能不能贴一下你想要的实际sql查询和查询,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多