node.js - 使用sequelize 包含列的where 子句

标签 node.js orm sequelize.js

我正在使用此查询:

db.Spectrum.findAll({
        attributes: ['title', [db.Sequelize.fn('SUM', db.Sequelize.col('quantity') ), 'count']],
        include: [
            {model: db.Varietal,
             attributes : ['specID', 'id'],
                include : [
                    { model : db.Wine,
                      required: false,
                      attributes : ['varietal_id', 'id'], 
                      where : {restaurant_id : restaurant_id,
                                owner_id : null} }
                ],
            }
        ],
        group : ['specID']
    })

这给了我正确的结果,问题是因为它和左连接的 where 子句运行得非常慢(大约 2 秒)。

左连接的原始查询如下所示。

LEFT OUTER JOIN `wines` AS `Varietals.Wines` ON `Varietals`.`id` = `Varietals.Wines`.`varietal_id` AND `Varietals.Wines`.`restaurant_id` = 16 AND `Varietals.Wines`.`owner_id` IS NULL 

我希望查询具有左连接和这样的 where 子句..

LEFT OUTER JOIN `wines` AS `Varietals.Wines` ON `Varietals`.`id` = `Varietals.Wines`.`varietal_id`
WHERE `Varietals.Wines`.`restaurant_id` = 16 AND `Varietals.Wines`.`owner_id` IS NULL 

但是我尝试的所有操作都将“Spectrum”放在它前面,然后找不到该行。这应该如何完成?或者我必须只使用原始查询?

最佳答案

include.where 始终将条件添加到连接中。 然而,在 Sequelize v3.13.0 中添加了对特殊嵌套键的支持。

现在可以将 where 对象添加到包含用 $ 包裹的点分隔键的顶级对象,以指定它是嵌套字段。

将其应用到您的代码中:

db.Spectrum.findAll({
  include: [
    {
      model: db.Varietal,
      include : [
        {
          model : db.Wine
        }
      ]
    }
  ],
  where: {
    '$Varietals.Wines.restaurant_id$': restaurant_id,
    '$Varietals.Wines.owner_id$': null
  },
  group : ['specID']
});

(我删除了一些语句以重点关注重要部分)

关于node.js - 使用sequelize 包含列的where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640521/

相关文章:

javascript - 可以在 Sequelize 中嵌套包含的 WHERE 吗?

node.js - Sequelize 关联错误 : A is not associated to B

node.js - webdriver-manager 更新抛出错误 : connect ETIMEDOUT

javascript - 无需 http 即可访问本地应用程序的 API(1 Heroku dyno 内)

javascript - node.js process.stdout.write 类型错误

node.js - 异步等待然后在同一个函数上

node.js - 嵌套对象查询到 Prisma 中的单个数组

javascript - Sequelize 为 LIKE 添加额外的引号

java - Hibernate 中同一个表中的一对多映射

node.js - 在 where 上使用 Sequelize 函数