2017-02-27 168 views
0

我期待从数据库中返回与一个或多个关键字相关的所有文章,但我不确定是否有正确的方法去解决这个问题?Sequelize:如何基于关联的关键字实现搜索?

我使用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) { 
    ... 
}); 

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

任何人都可以提出正确的方式去做这件事吗?

回答

0

嗨,你可以尝试通过

require:true 

在包括块内部连接,并检查

编号:https://stackoverflow.com/a/31680398/4583460

+0

这是行不通的。相同的行为 –

+0

嗯。你可以粘贴实际的SQL查询和你想要的查询, –