在我的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);
});
}
});
答案 0 :(得分:0)
在一些谷歌搜索后解决了我的问题。感谢mongodb v2.4中引入的新“$ setOnInsert”运算符。
var slug = getUniqueSlug("name");
var qry = {"name": req.s_name, "class": req.s_class};
var update = {"$addToSet": {"data": req.body.s_data}, "$setOnInsert": {"slug": slug}};
self.model("Collection").findAndModify ( qry, update, {"safe": true, "upsert": true} );