Javascript Sequelize Op.notIn与Sequelize模型

Javascript Sequelize Op.notIn与Sequelize模型,javascript,mysql,node.js,sequelize.js,Javascript,Mysql,Node.js,Sequelize.js,您好,我有一个mysql查询,它在sequelize.query中运行良好,查询是 从列表l中选择列表名称,其中l.list\U id不在列表l中 从“列表\子列表\活动”“子左联接”中选择子列表\ id。 a.list\u act\u id=sub.list\u act\u id上的活动a,其中a.agency\u id=2findAll和其他查询方法是异步的,因此您需要解析承诺或使用回调解析值,然后才能将列表\u id传递给Op.notIn。它还将返回一个具有list_id属性的对象数组,

您好,我有一个mysql查询,它在sequelize.query中运行良好,查询是

从列表l中选择列表名称,其中l.list\U id不在列表l中 从“列表\子列表\活动”“子左联接”中选择子列表\ id。 a.list\u act\u id=sub.list\u act\u id上的活动a,其中a.agency\u id=2findAll和其他查询方法是异步的,因此您需要解析承诺或使用回调解析值,然后才能将列表\u id传递给Op.notIn。它还将返回一个具有list_id属性的对象数组,因此在使用它之前,需要将其映射到一个整数数组。您还可以传入raw:true,这样它就不会根据您的结果生成Sequelize实例,而是返回普通javascript对象——这比创建对象只是为了获取单个属性更有效

通过设置required:false(活动包括),您将返回所有列表活动,而不会对其进行筛选。某些活动的结果将为空。这可能不是你想要的

为了清晰起见,此示例使用async/await而不是Enables。请注意,这并不是最有效的,因为它需要多个数据库查询,理想的解决方案是使用左连接,然后删除package.list_id为NULL的项。请参见第二个示例

//获取列表id设置为的活动数组 const activities=wait List\u sub\u activities.findAll{ 属性:['list_id'], 包括:{ 模式:活动, //不使用required:false仅返回List_sub_Activities.Activities不为null的结果 //必填项:false, 其中:{ 机构代码:2, }, }, raw:是的, }; //将属性映射到仅包含ID的数组 const activityIds=activities.mapactivity=>activity.list\u id; //现在您可以将ActivityID传递给Op.notIn const packages=等待包的列表。findAll{ 属性:['list_name'], 其中:{ 列表id:{ [Op.notIn]:活动ID, }, }, }; 用这些表

列出子活动。findAll。。。 .thenactivities=>activities.mapactivity=>activity.list\u id .ThenActivityId=>包的列表。findAll。。。 .thenpackages=>{ console.logpackages; }; 此示例将\u包的列表\u左连接到与活动相连接的\u子\u活动,其中将机构\u id设置为2,然后仅从\u包的列表\u返回结果,其中列表\u子\u活动。列表\u id为空。左连接上未匹配任何内容。这将在单个查询中返回与上面相同的结果

// Get List_of_Packages where there is no match in List_sub_Activities after 
// it is joined to Activities with the agency_id set.
const agencyId = 2;
const packages = await List_of_Packages.findAll({
  attributes: ['list_name'],
  include: {
    model: List_sub_Activities,
    // we don't need to actually fetch the list_id
    attributes: [],
    include: {
      model: Activities,
      where: {
        agency_id: agencyId,
      },
    },
    // uses a LEFT JOIN
    required: false,
  },
  // only return results where the List_sub_Activities.list_id is null
  where: sequelize.where(sequelize.col('List_sub_Activities.list_id'), 'IS', null),
});

用[Op.ne]更改[Op.in],然后再试一次。@DhavalDarji感谢您的评论,但它不起作用。抱歉,我忘了添加[Op.notIn]您解决了这个问题?