我正在尝试search
document
mongo database
found document data
然后使用 var posts = {};
Posts.findOne({'url': req.body.url}, function(err, data){
posts = data;
//console.log(data);
Comments.findOne({'bucket': posts.bucket}, function(err, data){
var comment= data;
if(data.count>10){
posts.bucket = posts.bucket +1;
comment.bucket = comment.bucket +1;
}
comment.save(function(err, data){
if(err)
throw err;
});
});
posts.save(function(err, data){
if(err)
throw err;
res.json(data);
});
});
搜索其他文档然后更新 。找到第二个文件后,将保存第一个文件。
但是使用我的代码,第一个文档保存但不保存更新的数据
我的代码:
posts
我观察到,Comments.findOne({...})
中的posts
变量中所做的任何更改都保留在本地,并且不会影响外部yield*
变量,但它只是声明一次。那我怎么能这样做呢。代码有问题吗?我该怎么做!
答案 0 :(得分:1)
在找到第二个文件后,将保存第一个文件。
在您的代码中,您以并行方式保存comment
和post
,您需要在保存document
之后保存帖子:
var posts = {};
Posts.findOne({
'url': req.body.url
}, function(err, data) {
posts = data;
//console.log(data);
Comments.findOne({
'bucket': posts.bucket
}, function(err, data) {
var comment = data;
if (data.count > 10) {
posts.bucket = posts.bucket + 1;
comment.bucket = comment.bucket + 1;
}
comment.save(function(err, data) {
if (err)
throw err;
posts.save(function(err, data) {
if (err)
throw err;
res.json(data);
});
});
});
});
另一个重要的评论:您正在创建callback hell,以后会导致未知行为。请使用async或promises代替嵌套回调。