Node.js Sequelize联接模型包括多对多

Node.js Sequelize联接模型包括多对多,node.js,sequelize.js,Node.js,Sequelize.js,假设我有三个这样的模型 var User = _define('user', { username: Sequelize.INTEGER }); var UserPubCrawl = _define('userpubcrawl', { user_id: Sequelize.STRING(64), // the user bar_id: Sequelize.INTEGER // 1 to many }); var Bars = _define('bar', { name: ty

假设我有三个这样的模型

var User = _define('user', {
  username: Sequelize.INTEGER
});
var UserPubCrawl = _define('userpubcrawl', {
  user_id: Sequelize.STRING(64), // the user
  bar_id: Sequelize.INTEGER // 1 to many
});

var Bars = _define('bar', {
  name:  type: Sequelize.STRING,
}
这种关系是一餐饭

Userone->UserPubCrawl to many->Bars to many

因此,对于一个特定的发布爬网,一个用户可以对多个酒吧进行多个发布爬网 我想找到辛普森去过的所有酒吧

我需要更改模型定义吗?如果需要,请告诉我?
findAll查询是什么样子的?

如果我正确理解了您的数据库关系,它可以表示为:

1用户可以访问多个酒吧 1条可供多个用户访问

换句话说,用户和条之间存在多对多关系,连接表为userpubscrawl

如果是这样,您的模型关联应该如下所示:

User.belongsToMany(Bar, { through: UserPubCrawl });
Bar.belongsToMany(User, { through: UserPubCrawl });
而且,找出辛普森去过的所有酒吧非常简单:

User.findAll({
  where: { user_id: '123' },
  include: {
    model: Bars,
    through: { attributes: [] } // this will remove the rows from the join table (i.e. 'UserPubCrawl table') in the result set
  }
});

如果我正确理解您与DB的关系,则可以表述为:

1用户可以访问多个酒吧 1条可供多个用户访问

换句话说,用户和条之间存在多对多关系,连接表为userpubscrawl

如果是这样,您的模型关联应该如下所示:

User.belongsToMany(Bar, { through: UserPubCrawl });
Bar.belongsToMany(User, { through: UserPubCrawl });
而且,找出辛普森去过的所有酒吧非常简单:

User.findAll({
  where: { user_id: '123' },
  include: {
    model: Bars,
    through: { attributes: [] } // this will remove the rows from the join table (i.e. 'UserPubCrawl table') in the result set
  }
});

好极了这正是我所需要的。谢谢@adhyatmik如果你想找到所有访问过bars X和Y的用户怎么办?@FelaMaslen User.findAll{where:{User_id:'123'},包括:{model:bars,where:{bar:X},through:{attributes:[]};通过:{attributes:[]}保存我的一天。谢谢你。这正是我所需要的。谢谢@adhyatmik如果你想找到所有访问过bars X和Y的用户怎么办?@FelaMaslen User.findAll{where:{User_id:'123'},包括:{model:bars,where:{bar:X},through:{attributes:[]};通过:{attributes:[]}保存我的一天。谢谢