2017-01-06 10 views
0

私のプロジェクトはexpress.jsとsequelize.jsを使用しています。私は1つ以上の関連付けを持っている場合に基づいてクエリをフィルタリングしようとしています。ここで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) 
    }) 
}) 

クエリは、タグ「安い」を持っているすべての投稿を返します、 'cars'、 'cheap' 'cars'などがあります。

「安い」タグと「cars」タグの両方を持つ投稿のみを返し、1つだけの投稿を除外します。

助けていただけたら幸いです!私は、過去の日に、ドキュメントやフォーラムで回答を見つけることができませんでした!

答えて

0

あなたはquery docs$and演算子を使用したい:

PostModel.findAll({ 
    include: [ { 
     model: TagModel, 
     where: { $and: [ { title: 'cheap' }, { title: 'cars' } ] } 
    } ] 
}); 
+0

私はこれを試してみましたが、それは空の配列が返されました。 – Rumthorp

関連する問題