繁体   English   中英

Node.js异步MongoDB保存或更新

[英]Nodejs asynchronous mongodb save or update

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

问题是,如果要向同一资源发出另一个请求,则我的函数将查找数据,并发现该数据不存在(但尚未),但是到保存调用时,即从上一个保存功能已完成,因此保存失败(某些字段必须是唯一的)。

我目前已经使用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);

    });
  });

};

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

为什么不UPSERT

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM