[英]Sequelize query nodejs
I need to filter the "incomers" based on age, but in the table I only have the date of birth. 我需要根据年龄过滤“进入者”,但是在表中我只有出生日期。 I need people between the minimum and maximum age, how can I do it? 我需要年龄在最低和最高之间的人,我该怎么办?
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
}));
});
You can use the between
operator: 您可以使用between
运算符:
model.person.findAll({
where: {
uf: parameters.states,
species: parameters.species,
dateBirth: {
[Op.between]: ['2000-01-01', '2020-01-01'],
}
}
})
You can use it like : 您可以像这样使用它:
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]
}
}
})
You can use Raw queries in your where something like - 您可以在以下位置使用Raw查询-
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+') )')
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.