Sequelize запрос nodejs - PullRequest
0 голосов
/ 05 декабря 2018

Мне нужно отфильтровать «доходников» по ​​возрасту, но в таблице у меня есть только дата рождения.Мне нужны люди от минимального до максимального возраста, как я могу это сделать?

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
        }));
});

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы можете использовать его как:

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]
        }
    }
})
0 голосов
/ 08 декабря 2018

Вы можете использовать необработанные запросы в вашем где-то вроде -

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+')  )')
})
0 голосов
/ 05 декабря 2018

Вы можете использовать оператор between:

model.person.findAll({
    where: {
        uf: parameters.states,
        species: parameters.species,
        dateBirth: {
          [Op.between]: ['2000-01-01', '2020-01-01'],
        }
    }
})
...