Nodejs + Mongoose:查找和更新

我试图在我的mongo database search document ,然后使用found document data search另一个文档,然后同时更新 。 第一个文件在第二个文件find后被保存。

但与我的代码第一个文件保存但不保存更新的数据

我的代码:

  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); }); }); 

我观察到在Comments.findOne({...})中的postsvariables做了什么改变,它仍然是本地的,并且不影响外部postsvariables,但是它只是被声明一次。 所以我怎么做到这一点。 代码有问题吗? 我该怎么做呢!

第一个文件在第二个文件find后被保存。

在您的代码中,您将以并行方式保存commentpost ,您需要在保存document后保存post:

 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); }); }); }); }); 

另一个重要的评论:你正在创build一个callback地狱 ,导致未知的行为。 请使用asynchronous或承诺,而不是嵌套callback。