【发布时间】:2014-02-02 14:44:13
【问题描述】:
在我的 node.js 应用程序中,路由在 Ajax 请求上执行,它总是接收并发请求。
我的要求是检查类似的文档,如果存在,将数据插入到现有文档中。如果没有类似的文档,则创建一个新记录。
参考下面给出的代码。问题是大多数时候“findExistingDoc”返回 false,但是当调用尝试创建新文档时,之前的调用已经创建了类似的文档。
请提供解决此问题的最佳解决方案。
self.findExistingDoc(function(err, doc){ // Check if a similar doc already exist
if (!doc){
console.log ("NO existing doc");
self.save(function(err, doc) {
if (err) {
console.error ("DB Error while creating new doc : " + JSON.stringify(err));
} else {
console.log ("New document created");
}
});
} else {
console.log ("existing doc");
var qry = {"name": req.s_name, "class": req.s_class};
self.model("Collection").findOneAndUpdate (qry, {$addToSet: {"data": req.body.s_data}}, {safe: true, upsert: true}, function (err, album) {
if (err) {
console.error ("DB Error while adding data to existing doc : " + JSON.stringify(err));
} else {
console.log ("Data added to existing doc");
}
callback(err, output);
});
}
});
【问题讨论】:
-
doc的结构和正文中的s_data是什么
-
{ s_name: "John", s_class: "Pre-Univ", data: [ { d1: "XYZ"}, {d1: "ABC"} ] }
标签: node.js mongodb concurrency