簡體   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