Nodejsasynchronousmongodb保存或更新

所以我创build了一个REST API,当有人调用一个方法来返回数据时,我从外部API获取数据,检查数据的ID是否已经存在,如果有,更新它,如果没有创build它。

问题是,如果另一个请求进入相同的资源,我的函数查找数据,并发现它不存在(但),但到了保存调用的时候,从以前的保存function已经完成,所以保存失败(有些字段必须是唯一的)。

我目前使用nodejs async和一个worker来设置一个队列。 这工作,但我认为这将是真正导致性能问题!

有谁知道我怎么能做到这一点,不会导致性能问题?

var storeData = function(APIResponse, id, callback){ Record.findOne({ id: id }, function(err, data) { if(data === null) { //No record, so lets create one var data = {}; data.id = id; data.title = APIResponse.title; var dataToSave = new Record(data); } else { //data exists in store, lets update it data.title = APIResponse.title; //Update title var dataToSave = data; } dataToSave.save(function(err, doc) { if(err) {throw err;} //A callback to continue with some other processes callback(null, APIResponse, doc); }); }); }; 

任何想法/build议将非常感激,非常感谢

为什么不只是上位 ?

 var storeData = function(APIResponse, id, callback) { var record = { id: id, title: APIResponse.title }; Record.findOneAndUpdate({ id: id }, record, { upsert: true }, function(err, doc) { if(err) { throw err; } callback(null, APIResponse, doc); }); };