Nodejs 异步 mongodb 保存或更新
Nodejs asynchronous mongodb save or update
所以我正在创建一个 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);
});
};
相关文章:
- JavaScript-保存、存储和更新数组
- 使用odata 4的jaydata 1.5和保存/更新数据时的错误
- AngularJS服务(更新/保存)
- Angular js,在选择元素上,我想 POST 数据以将其保存在数据库中,然后我想使用 PUT 更新它而无需重新加载
- 如何在jQuery中的单个保存按钮上更新数据和添加数据
- 在保存更新类之前分析云
- 编辑以前保存的文档也会更新数据库中的文档
- 如何在asp中保存服务器中的更新完整日历事件
- 使用Javascript中生成的XML将现有XML保存/更新到服务器
- 保存后更新Mongoose
- 将更新后的值保存到数据库中,并在html表中显示
- MongoDB Mongoose使用数组保存或更新
- 如何在保存后自动更新时识别Selenium页面中的元素?(自动化相关)
- 如何在JEditable/JQuery中保存事件后字段的更新值
- 使用保存之前更新解析对象
- 更新图像时,它不会保存在数据库中
- jsPDF 在第一次保存时工作,在第二次保存时不更新
- Parse.com 尝试在保存云代码后更新用户
- 保存或删除集合中的模型时,主干视图不会更新
- 异步添加/更新保存方法未更新