【发布时间】:2017-04-28 23:44:39
【问题描述】:
我有一个包含模型中有多个 where 条件的 sequelize 查询:
const scrapingUrl = await db.ScrapingUrl.findOne({
where: strong text{
date_downloaded: null,
},
include: [ {
model: db.Action,
where: {
$or: {
hourly_scraping_limit: null,
scraping_counter: {
$or: {
$eq: null,
$lt: Sequelize.literal('Action.hourly_scraping_limit')
}
}
},
$or: {
hourly_scraping_limit_per_proxy: null,
scraping_counter_per_proxy: {
$or: {
$eq: null,
$lt: Sequelize.literal('Action.hourly_scraping_limit_per_proxy')
}
}
}
},
include: [ db.ScrapingContainer ]
} ]
});
它似乎忽略了 hourly_scraping_limit 部分,只过滤了 hourly_scraping_limit_per_proxy。相关的查询部分是这样的:
$or: {
hourly_scraping_limit: null,
scraping_counter: {
$or: {
$eq: null,
$lt: Sequelize.literal('Action.hourly_scraping_limit')
}
}
},
Sequelize 记录以下 SQL 语句:
SELECT `ScrapingUrl`.`id`, `ScrapingUrl`.`action_id`, `ScrapingUrl`.`url`, `ScrapingUrl`.`date_added`, `ScrapingUrl`.`date_downloaded`, `ScrapingUrl`.`date_scraped`, `ScrapingUrl`.`success_pattern_found`, `ScrapingUrl`.`blocked_pattern_found`, `ScrapingUrl`.`scraping_blob_id`, `Action`.`id` AS `Action.id`, `Action`.`name` AS `Action.name`, `Action`.`scraping_container_id` AS `Action.scraping_container_id`, `Action`.`hourly_scraping_limit` AS `Action.hourly_scraping_limit`, `Action`.`hourly_scraping_limit_per_proxy` AS `Action.hourly_scraping_limit_per_proxy`, `Action`.`scraping_counter` AS `Action.scraping_counter`, `Action`.`scraping_counter_per_proxy` AS `Action.scraping_counter_per_proxy`, `Action`.`scraping_counter_last_reset` AS `Action.scraping_counter_last_reset`, `Action`.`scraping_success_pattern` AS `Action.scraping_success_pattern`, `Action`.`scraping_blocked_pattern` AS `Action.scraping_blocked_pattern`, `Action.ScrapingContainer`.`id` AS `Action.ScrapingContainer.id`, `Action.ScrapingContainer`.`name` AS `Action.ScrapingContainer.name` FROM `scraping_urls` AS `ScrapingUrl` INNER JOIN `actions` AS `Action` ON `ScrapingUrl`.`action_id` = `Action`.`id` AND ((`Action`.`hourly_scraping_limit_per_proxy` IS NULL OR (`Action`.`scraping_counter_per_proxy` IS NULL OR `Action`.`scraping_counter_per_proxy` < Action.hourly_scraping_limit_per_proxy))) LEFT OUTER JOIN `scraping_containers` AS `Action.ScrapingContainer` ON `Action`.`scraping_container_id` = `Action.ScrapingContainer`.`id` WHERE `ScrapingUrl`.`date_downloaded` IS NULL LIMIT 1;
【问题讨论】: