Nodejs + Mongoose:查找并更新

时间:2016-01-23 21:08:18

标签: node.js mongoose

我正在尝试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*变量,但它只是声明一次。那我怎么能这样做呢。代码有问题吗?我该怎么做!

1 个答案:

答案 0 :(得分:1)

  

在找到第二个文件后,将保存第一个文件。

在您的代码中,您以并行方式保存commentpost,您需要在保存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代替嵌套回调。