Nodejs 异步 mongodb 保存或更新

Nodejs asynchronous mongodb save or update

本文关键字:更新 保存 mongodb 异步 Nodejs      更新时间:2023-09-26

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

问题是,如果另一个请求要针对同一资源,我的函数会查找数据,并发现它不存在(尚不存在),但是当它进入保存调用时,来自前一个函数的保存已经完成,因此保存失败(某些字段必须是唯一的)。

我目前已经使用 nodejs 异步和单个工作线程设置了一个队列。这有效,但我认为它真的会导致性能问题!

有谁知道我如何以不会导致性能问题的方式做到这一点?

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);
    });
  });
};

任何想法/建议将不胜感激,非常感谢

为什么不直接更新?

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);
  });
};