我搜索了sequelize的官方文档,找不到任何有关' separate'的条目.https://readthedocs.org/search/?q=separate
我也在谷歌上搜索但是徒劳无功.
db.fooTable.find({
where: {
id: id
},
include: [{
model: db.barTable1,
separate: true
}, {
model: db.barTable2,
separate: true
}, {
model: db.barTable3,
separate: true
}]
})
Run Code Online (Sandbox Code Playgroud)
为了找出它的含义,我将' separate' 设置为false,但是查询的结果与我放' true' 时的结果相同.
我在当前的代码中找到了这个:
如果为true,则运行单独的查询以获取关联的实例,仅支持hasMany关联
详细说明:默认情况下,要检索相关的模型实例,Sequelize将使用SQL JOIN.通过启用separate,Sequelize将为每个关联模型执行单独的查询,并将结果文档连接到代码中(而不是让数据库执行连接).
假设我的Product模型与模型有hasMany关联Tag("产品可以有许多与之关联的标签").
这是"常规"查询:
SELECT
`product`.`id`,
`product`.`title`,
`tags`.`id` AS `tags.id`,
`tags`.`name` AS `tags.name`,
`tags`.`productId` AS `tags.productId`
FROM `products` AS `product`
LEFT OUTER JOIN `tags` AS `tags`
ON
`product`.`id` = `tags`.`productId`;
Run Code Online (Sandbox Code Playgroud)
以下是separate : true查询:
SELECT
`product`.`id`,
`product`.`title`
FROM `products` AS `product`;
SELECT
`id`,
`name`,
`productId`
FROM `tags` AS `tag`
WHERE
`tag`.`productId` IN (1);
Run Code Online (Sandbox Code Playgroud)
@robertklep 回复的补充:
正如您现在所知,它分离了一个以其他方式连接的查询。
这意味着在您有许多连接和嵌套连接(在某些情况下可能会产生巨大影响)的某些情况下,它的性能会更高。嵌套连接使 Sequelize 在单个大查询中花费比运行多个小查询更多的时间。问题被指出为重复数据删除操作:
请参阅此处: SequelizeJS 中的慢关联