在Sequelize关联中搜索多个值

时间:2017-03-22 08:08:24

标签: node.js express sequelize.js

在我目前的项目中,我创建了一个Gallery Service,我想在其中实现一个搜索功能,用户可以通过选择不同的过滤器来搜索特定的图像。在后端,为图像分配了许多过滤器。

我的问题是,当我向Gallery Service 提供多个过滤器时(例如以下过滤器ID:23,42),它会返回包含过滤器#23的图像 OR 过滤器#42 两者。我希望只获得包含两个ID的图像。

picture.model.js

sequelize.define("Picture", {
  //...
  picturePath: {
    type: DataTypes.STRING
  }
}, {
  classMethods: {
    associate: function(models) {
      Picture.belongsToMany(models.Filter, { as: 'filters', through: 'PictureFilter' };
  }
}

filter.model.js

sequelize.define("Filter", {
  //...
  name: {
    type: DataTypes.STRING
  }
}

查询我尝试的内容

model.Picture.findAndCountAll({
  where: {
    $ne: null
  },
  include: [
    {
      model: models.Filter,
      as:    'filters',
      where: {
        id: {
          $in: [23, 42]
        }
      }
    }
  ]

经验丰富的结果:

  [
    {
      ...,
      "rows": [
        {
          ...,
          "filters": [
            {
              "id": 23,
              ...
            }
          ]
        },
        {
          ...,
          "filters": [
            {
              "id": 23,
              ...
            },
            {
              "id": 42,
              ...
            }
          ]
        }
      ]
    }
  ]

预期结果:

  [
    {
      ...,
      "rows": [
        {
          ...,
          "filters": [
            {
              "id": 23,
              ...
            },
            {
              "id": 42,
              ...
            }
          ]
        }
      ]
    }
  ]

提前谢谢!

1 个答案:

答案 0 :(得分:-1)

使用$contains代替$in,请参阅以下示例:

id: {
  $contains: [23, 42]
}