微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何避免在节点、sqlite [knex、objectionJS] 中插入重复记录

如何解决如何避免在节点、sqlite [knex、objectionJS] 中插入重复记录

我正在从 api 中提取数据并存储到数据库中,这是我从 api 中获取的值:

const optAdThisMonthsResult =  [
            [ 'google.com','display','2021-02-01',3,48,76 ],[ 'google.com','a1.PHP',94,31,42 ],]

获取后我将其存储在我的数据库中:

for (const data of optAdThisMonthsResult) {

        //1. Assign values to store
        let rowData = {
            url: data[0],tags: data[1],date: data[2],value1: data[3],value2:data[4],value3: data[5],};

        //2. Store to database
        let ret = await OptAd.query().insert(rowData);
        console.log(
            `Inserted OptAd data with return code: ${require("util").inspect(ret)}`
        );
    }

每次我运行这个脚本时,它还会存储数据库中已经存在的重复值,如果数据已经存在,我如何为此构建测试不插入,只更新这个 value1 value2 value3

解决方法

首先尝试使用 Knex 进行更新,如果返回零行更新尝试插入

for (const data of optAdThisMonthsResult) {
  //1. Assign values to store
  let rowData = {
    url: data[0],tags: data[1],date: data[2],value1: data[3],value2: data[4],value3: data[5],};

  // get count first
  const result = await OptAd.query()
    .count("tags as count")
    .where({ url: data[0],taga: data[1],date: data[2] })
    .first();
  try {
    if (result.count === 0) {
      // row not present insert data
      let ret = await OptAd.query().insert(rowData);
      console.log(
        `Inserted OptAd data with return code: ${require("util").inspect(ret)}`
      );
    } else {
      // row already presnt do update
      // checking if its not updated
      const { count } = await OptAd.query()
        .count("tags as count")
        .where(rowData)
        .first();
      if (count === 0) {
        const updated = await OptAd.query()
          .update(rowData)
          .where({ url: data[0],date: data[2] });
        console.log("updated");
      } else {
        console.log("Not Changed");
      }
    }
  } catch (error) {
    console.log(error.message);
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。