根据flag在Sequalize中添加“where”查询

时间:2017-03-09 10:25:42

标签: angularjs node.js sequelize.js

我想基于flag在Sequalize中添加“where”查询。让我知道如何获得这个。

例如,如果标志为true,那么我想添加这个“where”类,否则我不想添加“where”子句。

models.Users.findAll({
        where: {
            email: req.query.email
        }
    }).then(function (list) {
        res.send(list);
    }).catch(function (error) {
        res.status(500).json(error);
    });



models.Users.findAll({
    }).then(function (list) {
        res.send(list);
    }).catch(function (error) {
        res.status(500).json(error);
    });

3 个答案:

答案 0 :(得分:1)

您可以首先在where子句中创建JSON,然后在where子句中传递它...类似

var jsonObj = null ;

if (req.query.email){
   jsonObj =  {"email": req.query.email};
} else {
   jsonObj =  {"email": {$ne:null}}; //otherwise it will return all rows, if email is not null in your database
}

models.Users.findAll({
        where: jsonObj
    }).then(function (list) {
        res.send(list);
    }).catch(function (error) {
        res.status(500).json(error);
    });

希望这会有所帮助

答案 1 :(得分:0)

您可以从空查询对象开始,并在适当时添加where属性:

let query = {};

if (someCondition) {
  query.where = { email: req.query.email };
}
models.Users.findAll(query).then(...);

答案 2 :(得分:0)

您可以在findAll方法调用中使用简单的{{3}}。我们假设variable是你的布尔标志

models.Users.findAll(variable ? { where: { email: req.query.email } } : {}).then(list => {
    res.send(list);
}).catch(error => {
    res.status(500).json(error);
});

或者您可以将options对象分配给变量并使用相同的if语句,但在findAll调用之外

let options = variable ? { where: { email: req.query.email } } : {};

models.Users.findAll(options).then(list => {
    // ...
});