续集查询nodejs
Posted
技术标签:
【中文标题】续集查询nodejs【英文标题】:Sequelize query nodejs 【发布时间】:2018-12-05 16:40:55 【问题描述】:我需要根据年龄过滤“收入者”,但在表中我只有出生日期。我需要最小和最大年龄之间的人,我该怎么做?
router.post('/', function (req, res, next)
let parameters = JSON.parse(req.body.parameters);
parameters.states = parameters.states.split();
parameters.species = parameters.species.split();
model.person.findAll(
where:
uf: parameters.states,
species: parameters.species,
dateBirth: BETWEEN PARAMETERS.MINAGE AND PARAMETERS.MAXAGE
)
.then(person => res.json(
error: false,
data: person
))
.catch(error => res.json(
error: true,
data: [],
error: error
));
);
【问题讨论】:
【参考方案1】:您可以使用between
运算符:
model.person.findAll(
where:
uf: parameters.states,
species: parameters.species,
dateBirth:
[Op.between]: ['2000-01-01', '2020-01-01'],
)
【讨论】:
【参考方案2】:你可以像这样使用它:
var startAge = 18;
var endAge = 20;
var today = moment();
var startDate = today.subtract('years', startAge);
var endDate = today.subtract('years', endAge);
model.person.findAll(
where:
uf: parameters.states,
species: parameters.species,
dateBirth: :
$between: [startDate, endDate]
)
【讨论】:
但参数是年龄 startAge: 18, endAge: 20, 出生日期是这样的日期:“YYYY / MM / DD” 意味着你需要在 18 和 20 年前出生,对,所以开始日期是 1998 年 1 月 1 日,结束日期是 2000 年 12 月 31 日,:) @FilippeOliveiraDaSilvaRodr跨度> @FilippeOliveiraDaSilvaRodr,请检查更新的答案,我已经通过使用moment js展示了。【参考方案3】:您可以在 where 中使用原始查询,例如 -
var Sequelize = require("sequelize");
var now = '2010-01-01';//Current Date
model.person.findAll(
where: Sequelize.literal('( (ud IN ('+parameters.states+')) AND (species IN ('+parameters.species+')) AND ((DATE_FORMAT(FROM_DAYS(DATEDIFF(dob,'+now+')), "%Y")+0) BETWEEN '+minDate+' AND '+maxDate+') )')
)
【讨论】:
以上是关于续集查询nodejs的主要内容,如果未能解决你的问题,请参考以下文章