javascript - Nodejs异步mongodb保存或更新

标签 javascript node.js mongodb asynchronous mongoose

因此,我正在创建一个 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);

    });
  });

};

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

最佳答案

为什么不只是 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);
  });
};

关于javascript - Nodejs异步mongodb保存或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27425717/

相关文章:

javascript - 我如何将 2 个不同的特殊字符视为与 jquery/javascript 相同的字符?

linux - 通过 nvm 升级 Node 后 Node 调试中断

node.js - 为什么 node.js 不稳定?

javascript - 使用 eval 模拟私有(private)范围标识符

node.js - 使用 MongoDB 在 Node.js 中扩展,我应该什么时候一次查询所有 ID,还是并行查询每个 ID?

javascript - 可以将 CSS 添加到某些 JS 以设置禁用的复选框文本的样式

javascript - 当我使用 Django 在后端处理某些内容时,如何制作加载页面?

mongodb - "SCRAM-SHA-1"认证机制需要使用 --enable-ssl 构建的 libmongoc

mongodb - 如何在 Mongo Shell CLI 中使用脚本

javascript - 如何使用 jQuery 动态添加 html,并在元素上添加点击监听器?