若不存在则插入,存在则更新,如何实现?
需要更新的列表长度未知。 其他语言的话一个循环同步的写下来,非常容易。
用node写异步的就觉得比较忧伤了,我给出自己的做法,也看看大家遇到这样的需求是怎么做的。
var async = require("async");
var list = ["a", "b", "c"];
var tasks = [];
var result;
list.forEach(function(item) {
tasks.push(function() {
var qs = "select * from table where name=\"" + item + "\"";
db.query(qs, function(err, rows) {
var flag;
if(err) {
throw err;
}
if(rows[0]) {
flag = true;
} else {
flag = false;
};
result = {
id:rows[0].id || null,
name: name,
flag: flag
};
}
done();
})
});
tasks.push(function(done) {
var qs;
if(result.flag) {
qs = "update table set name=\"" + result.name + "\" where id=" + result.id;
} else {
qs = "insert into table set name=\"" + result.name "\"";
}
db.query(qs, function() {
done();
});
});
});
async.series(tasks);
3 回复
用MongoDB吧,它有upsert可以实现
用async咯,async.forEachSeries
嗯,是用async了,写漏了。突然意识到自己写复杂了。这个地方不用保存select的状态,直接把插入或更新操作写在查找的回调里就好了……