sequelize(关系/关联)子查询

时间:2017-02-13 03:54:41

标签: sequelize.js

Sequelize.js 一对多关联

/usr/lib/gcc/x86_64-linux-gnu/4.9/

[国家]& DB中的[City],就像那样:

var City = sequelize.define('city', { countryCode: Sequelize.STRING });
var Country = sequelize.define('country', { isoCode: Sequelize.STRING });

// Here we can connect countries and cities base on country code
Country.hasMany(City, {foreignKey: 'countryCode', sourceKey: 'isoCode'});
City.belongsTo(Country, {foreignKey: 'countryCode', targetKey: 'isoCode'});

我希望Query [Country]存在[City],带偏移&限制,使用ORM,而不是sql,就像那样:

- Country-001
    * City-001-1
    * City-001-2
    * City-001-3
- Country-002
    * City-002-1
    * City-002-2
    * City-002-3
- Country-003
    no city
- Country-004
    * City-004-1
    * City-004-2
    * City-004-3
...
- Country-100
    * City-100-1
    * City-100-2
    * City-100-3

我不知道怎么做?

我试过某种方式,但效果不好。 这种方式不正确,它会返回9 [Country]而不是10,[Country-003]真的没有结果,但是限制不正确。

Country.findAll({
    where: {},
    include: [],
    offset: 0,
    limit: 10
});

1 个答案:

答案 0 :(得分:0)

对于初学者来说,将require: true表示如果Country没有与之关联的任何City个对象,那么它将不会作为查询的一部分返回。< / p>

此外,您的查询结构取决于您尝试限制的内容。

如果您想要仅返回10条Country条记录,则每条记录都会包含任意数量的City个对象:

Country.findAll({
  include: [{
    model: City,
    require: true,
  }],
  limit: 10
});

如果您想要取回所有Country个对象,但每个对象最多只能找到10个City个对象:

Country.findAll({
  include: [{
    model: City,
    require: true,
    limit: 10
  }],
});

如前所述,您也可以放弃required: true来解除限制,Country必须将任何City个对象关联到结果中。