2016-01-23 60 views
1

我想searchdocumentmongo database然后使用found document data搜索另一个文档,然后更新两个。在找到第二个文档后,将保存第一个文档。+的NodeJS猫鼬:查找和更新

但是我的代码的第一个文件保存,但不列入节省更新数据

我的代码:

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({...})做它仍然地方吧并且不会影响外部变量,但它仅被声明一次。所以我该如何做到这一点。代码有问题吗?我该怎么做呢!

回答

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之后会导致未知行为。请使用asyncpromises而不是嵌套回调。

+0

Got it!谢谢..仰望异步! – Karan