【问题标题】:How to check update and insert while using bulkCreate in node.js如何在 node.js 中使用 bulkCreate 时检查更新和插入
【发布时间】:2022-11-10 03:30:05
【问题描述】:

我正在使用 node.js 将 excel 文件上传到数据库中,在我的服务中我使用 bulkCreate 将数据上传到 mysql db。让我发布表结构

  table name : customer_details
  columns:
  customer_org_id INT,
  customer_name VARCHAR,
  customer_type char,
  active boolean,
  customer_slot VARCHAR,
  service_start_time DATE,
  service_end_time DATE

我还有一个额外的要求,即当我将上传 excel 并尝试推送到数据库时,它必须在数据库中检查 customer_org_id &customer_name 是否存在于数据库中。如果组合存在,则现有记录将被更新并且活动列将为假。将插入一个带有 customer_org_id 和 customer_name 的新行,活动将设置为 true。我能够执行创建、更新、删除等个别操作,但我不明白该放在哪里这些操作一起做一个bulkCreate。我正在发布我的代码

const upload = async(req,res) => {
 try{
      if(req.file == undefined){
        return res.status(400).send("Please upload an excel file");
     }
  let path=
    __basedir + "/resources/static/assets/uploads/" + req.file.filename;

  readXlsxFile(path).then((rows)=>{
      rows.shift();
      let custdetail = [];
      
      row.forEach((row)=>{
        let custdetails ={
          customer_org_id: row[0],
          customer_name :row[1],
          customer_type :row[2],
          active :row[3],
          customer_slot: row[4],                           
        }; 
       custdetails.push(custdetail);
       });

     CustomerDetails.bulkCreate(custdetails)
       .then(()=>{
       res.status(200).send({
       message: "Uploaded the file successfully :" + req.file.originalname,
       });
       })
       .catch((error) =>{
        res.status(500).send({
        message : "Fail to import data into DB",
        error : error.message,
        });
      });
     });
    }catch(error){
    console.log(error);
    res.status(500).send({
    message : "Could not upload the file :" +req.file.originalname,
   });
   }
  }

任何人都可以让我知道在将数据添加到 Db 之前如何进行操作吗?我是节点 js 的新手

【问题讨论】:

    标签: javascript node.js express bulk-create


    【解决方案1】:

    如果我理解正确,bulkCreate 似乎不是您问题的最佳解决方案,因为您需要为数组的每一行进行验证和创建/更新。

    我不了解您的所有要求,但代码将接近此:

    const upload = async (rows) => {
      const promises = rows.map(async (sindleRow) => {
        const customer = await CustomerDetails.find({ where: { customer_org_id: row[0], customer_name: row[1] }})
    
        if (customer !== undefined) { // CUSTOMER FOUND
          await CustomerDetails.update({ where: { id: customer.id }, data: { active: false }})
          await CustomerDetails.create({ data: { customer_org_id: row[0], customer_name: row[1], active: false }})
        }
        
        return;
      });
    
      return await Promise.all(promises);
    }
    

    重要提示:此代码只是一个示例。

    您的方案似乎没有从使用 bulkCreate 中受益,因为需要单独验证数据。

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 2018-08-10
      • 2021-11-02
      • 2019-11-20
      • 2013-08-04
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      相关资源
      最近更新 更多