如何在Nodejs中使条件Sequelize模型查询

时间:2017-01-08 09:50:57

标签: node.js sequelize.js

我试图在Nodejs中使用if条件使用模型查询查询。

如果有过滤参数,我想按filter parameter选择用户。如果我不想选择所有用户。 我是通过以下方式做到的,但我对此进行了硬编码:

var filterData = { id: { $ne: null} };

使用Sequelize有没有正确的方法呢?感谢。



function getData(id, filter='') {
  var filterData = {  id: { $ne: null} };
  if (filter !== '') {
    filterData = {
      $or: [
        {firstName: {$like: '%' + filter + '%'}},
        {lastName: {$like: '%' + filter + '%'}}
      ]
    };
  }
  return models['Profile'].findAll({
    where: { profileId: id },
    include: [{
      model: models.Profile.scope('essentials'),
      where: filterData,
      as: 'entity'
    }]
  })
}




1 个答案:

答案 0 :(得分:1)

我认为您已经尝试过var filterData = {}var filterData = true并且没有效果?如果是这样,另一个选择是事先构建你的include对象,然后有条件地将where子句添加到它:

function getData(id, filter='') {
  var includeObj = {
    model: models.Profile.scope('essentials'),
    as: 'entity'
  }

  if (filter !== '') {
    includeObj.where = {
      $or: [
        {firstName: {$like: '%' + filter + '%'}},
        {lastName: {$like: '%' + filter + '%'}}
      ]
    };
  }

  return models['Profile'].findAll({
    where: { profileId: id },
    include: [includeObj]
  })
}

这避免了尴尬的"其中ID不等于null"条件。

也是一个小旁注(也许你已经知道这个,只是更喜欢更明确的代码)但是因为空字符串在javascript中是假的,

if (filter !== '') {

可以替换为

if (filter) {