续集中的"分离"意味着什么?

tha*_*lay 9 sequelize.js

我搜索了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' 时的结果相同.

rob*_*lep 8

我在当前的代码中找到了这个:

如果为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)


iwa*_*rte 6

@robertklep 回复的补充:

正如您现在所知,它分离了一个以其他方式连接的查询。

这意味着在您有许多连接和嵌套连接(在某些情况下可能会产生巨大影响)的某些情况下,它的性能会更高。嵌套连接使 Sequelize 在单个大查询中花费比运行多个小查询更多的时间。问题被指出为重复数据删除操作:

请参阅此处: SequelizeJS 中的慢关联