【问题标题】:Sequelize: Where is an example of using bulkDelete with criteria?Sequelize:在哪里使用带标准的 bulkDelete 的示例?
【发布时间】:2018-06-22 06:48:27
【问题描述】:

我正在尝试编写一个种子文件的down,我想将我在up 中创建的数据写入bulkDelete。但我找不到任何有关如何执行此操作的文档。官方文档没有举例:http://docs.sequelizejs.com/class/lib/query-interface.js~QueryInterface.html#instance-method-bulkDelete

谁能告诉我如何bulkDeleteFoo 中的所有行,其中name 等于x 或名称等于y

  down: (queryInterface, Sequelize) => {
    return queryInterface.bulkDelete('Foo', [what do I put here?], {});
  }

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    这里的其他两个答案都不适合我。我在 Sequelize GitHub 问题讨论中偶然发现了以下答案,效果很好:

    https://github.com/sequelize/sequelize/issues/5615#issuecomment-248384147

    注意,'keyword' 是列名,'Flags' 是表名:

    down: function (queryInterface, Sequelize) {
        return queryInterface.bulkDelete('Flags', {
            keyword: [
                "groupRegistration",
                "memberRegistration",
                "exhibitorRegistration",
                "facilitatorRegistration",
                "volunteerRegistration",
                "workshopSignup"
            ]
        });
    }
    

    【讨论】:

      【解决方案2】:
      down: (queryInterface, Sequelize) => {
        const Op = Sequelize.Op; 
      
        return queryInterface.bulkDelete(
          'Foo',
          {[Op.or]: [{name: x}, {name: y}]}
        );
      }
      

      第一个参数是表名,第二个参数是where 值,指示要删除哪些行。

      【讨论】:

      • 谢谢你,你是从哪里学来的?这在其他地方有记录吗?
      • 在这种情况下,文档声明第二个参数包含 where 条件。然后它是一个通常的续集对象。 or 运算符在文档see operators here 的运算符列表中以示例形式显示。我会做一个 PR 来更新文档,以便将来为其他人提供 bulkDelete 的示例
      • @DanielKaplan 如果这回答了您的问题,请您接受答案
      • @MichaelMcCabe 编辑了您的答案以反映 kaszac 的 cmets,我验证它是正确的。 '希望没关系。 (另外,请更加努力地验证您的答案是否按预期工作。谢谢!)
      【解决方案3】:

      我尝试使用@Michael McCabe 的建议并不断收到ERROR: Invalid value [object Object]。一旦我从第二个参数(标识符参数)中去掉where,我就能让它工作:

      down: (queryInterface, Sequelize) => {
        const Op = Sequelize.Op
        return queryInterface.bulkDelete('users', {id: {[Op.in]: [2, 3]}}, {})
      }
      

      【讨论】:

      • 修复了@MichaelMcCabe 的答案,所以它是正确的,因为它已经被接受了。谢谢你抓住那个。 (不确定这是否是纠正此问题的正确方法,但似乎是最简单的。抱歉,您没有因此获得更多荣誉。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多