Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何避免在节点sqlite[knex,objectionJS]中插入重复记录_Javascript_Node.js_Sqlite_Objection.js_Node Sqlite3 - Fatal编程技术网

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

Javascript 如何避免在节点sqlite[knex,objectionJS]中插入重复记录,javascript,node.js,sqlite,objection.js,node-sqlite3,Javascript,Node.js,Sqlite,Objection.js,Node Sqlite3,我从api中提取数据并存储到数据库中,下面是我从api中获取的值: const optAdThisMonthsResult = [ [ 'google.com', 'Display', '2021-02-01', 3, 48, 76 ], [ 'google.com', 'a1.php', '2021-02-01', 94, 31, 42 ], ] 获取后,我将其存储在数据库中: for (const data of optAd

我从api中提取数据并存储到数据库中,下面是我从api中获取的值:

const optAdThisMonthsResult =  [
            [ 'google.com', 'Display', '2021-02-01', 3, 48, 76 ],
            [ 'google.com', 'a1.php', '2021-02-01', 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], taga: data[1], date: data[2] });
        console.log("updated");
      } else {
        console.log("Not Changed");
      }
    }
  } catch (error) {
    console.log(error.message);
  }
}