我的项目使用express.js和sequelize.js。我试图根据它是否有一个或多个关联来过滤查询。
以下是我的模特:
const Tag = sequelizeConnection.define('tag', {
title: {
type: Sequelize.STRING,
validate: {
len: [1, 255]
}
},
counter: {
type: Sequelize.INTEGER,
validate: {
min: 0
}
}
})
const Post = sequelizeConnection.define('post', {
category: {
type: Sequelize.STRING,
validate: {
notEmpty: true
}
},
title: {
type: Sequelize.STRING,
validate: {
notEmpty: true,
len: [1, 500]
}
},
description: {
type: Sequelize.TEXT,
validate: {
len: [0, 10000]
}
},
images : {
type: Sequelize.ARRAY(Sequelize.TEXT)
},
email: {
type: Sequelize.STRING,
validate: {
notEmpty: true,
isEmail: true
}
}
})
Tag.belongsToMany(Post, {through: 'postTag', foreignKey: 'tagId'});
Post.belongsToMany(Tag, {through: 'postTag', foreignKey: 'postId'});
这是我的查询(由于测试原因,它现在是硬编码的)
router.route('/findPostsByTag')
.get((req, res) => {
PostModel.findAll({
include: [{model: TagModel, where: {title: ['cheap', 'cars']}}]
})
.then((data) => {
res.send(data)
})
.catch((err) => {
console.log(err)
res.sendStatus(500)
})
})
查询返回所有标记为“cheap”,“cars”和“cheap”“cars”的帖子。
我希望它只返回同时包含'cheap'和'cars'标签的帖子,并排除任何只有一个帖子的帖子。
任何帮助将不胜感激!过去一天,我无法在文档或论坛中找到答案!
答案 0 :(得分:0)
您想在query docs中使用$and
运算符:
PostModel.findAll({
include: [ {
model: TagModel,
where: { $and: [ { title: 'cheap' }, { title: 'cars' } ] }
} ]
});