感谢您抽出宝贵时间阅读我的问题。
我有一个包含记录的数组,我希望从NodeJS将其放入MYSQL数据库。这些记录有一个我想要UNIQUE的jobkey字段,但我不希望它是PRIMARY KEY,因为jobkey来自API,我想使用我自己的recid来更好地索引和排序。
我正在使用NodeJS首先检查jobkey是否存在,方法是执行SELECT WHERE并检查rows.length> 0?如果jobkey尚不存在,则添加作业。出于某种原因,我一直收到ER_DUP_ENTRY错误,我无法弄清楚为什么我的rows.length有时候=== 0,即使jobkey存在。我已经在墙上撞了几天。我希望这不仅仅是一个分号,也不是我忽略的那些简单错误之一。无论如何,我需要帮助,请查看我的代码。
function is_job_key(_jobkey, cb){ // cb(err, flag)
var sql = 'SELECT * FROM tbl_indeed WHERE ?';
conn.query(sql, {jobkey: _jobkey}, function(err, rows){
if(err){
console.log(err);
return cb(true);
}
bar.tick();
if(rows.length > 0){ // jobkey exists
return cb(null, true);
}
cb(null, false);
});
}
function insert_job(posts, cb){ // cb(err)
var sql = 'INSERT INTO tbl_indeed SET ?';
conn.query(sql, posts, function(err, result){
if(err){
console.log(err);
return cb(true);
}
bar.tick();
cb(null);
});
}
function insert_all_jobs(job_arr, query_str, cb){ // cb(err, count_inserted)
function get_posts(job){
var posts = {jobkey: job.jobkey, snippet: job.snippet, url: job.url, jobtitle: job.jobtitle, company: job.company, date: job.date, query_string: query_str};
return posts;
}
bar = new progress(' ' + query_str + ' (:current / :total) [:bar] :percent :etas', {
complete: '=',
incomplete: ' ',
width: 40,
total: job_arr.length*2
});
var count_inserted = 0;
async.each(job_arr, function(job, cb){
var posts = get_posts(job);
is_job_key(job.jobkey, function(err, result){
if(err) return cb(true);
if(result){
bar.tick();
return cb(); // jobkey exists
}
insert_job(posts, function(err){
if(err) return cb(true);
count_inserted++;
cb();
});
});
}, function(err){
if(err) return cb(true);
console.log('done');
conn.end();
cb(null, count_inserted);
});
}
var job_arr = JSON.parse(fs.readFileSync('technician.txt', 'utf-8'));
//job_arr = job_arr.splice(1, 10); //for some reason this works ok...
insert_all_jobs(job_arr, 'technician', function(err, result){
if(err) return console.log('error');
console.log(result);
});
感谢您阅读我的问题并度过了愉快的一天 〜A