2014-09-27 59 views
1

网页通过POST将JSON数据发送到我的Node.js应用程序(使用Mongoose的MEAN环境)。 JSON文件看起来像这样(节选):Node.js:通过迭代JSON POST数据创建多个MongoDB文档

Firstname: 'XY', 
    Surname: 'asd', 
    Articles: 
     [ { title: '1', description: 'XY' }, 
     { title: '2', description: 'XY' }, 
     { title: '3', description: 'XY' } 

目的是在MongoDB数据库创建一个作者,作者添加到其他目录,存储相关的文章,笔者文档中创建这些条款的引用(代码除外)。这是处理请求的代码:

[...] 
    async.waterfall([ 
      //Create random code for author (besides mongodb-specific id) 
      function(callback){ 
       newAuthorCode.randomAuthorCode(function(err, code) { 
        callback(null, code);  
       }); 
      }, 

      //Save new author to db 
      function(code, callback){ 
       var newAuthor = new Author({firstname: req.body.Firstname, 
             surname: req.body.Surname, 
             identcode: code 
       }); 

       newAuthor.save(function (err){ 
        callback(null, newAuthor); 
       }); 
      }, 

      //Add new author to an additional directory 
      function(newAuthor, callback){ 
       Directory.update({_id: req.user._id}, {$push: {authorids: newAuthor._id }}, function(err, update){ 
        if (update){ 
         callback(null); 
        } 
       }); 
      }, 

      //saves articles to db 
      function(callback){ 
       var keys = Object.keys(req.body.articles); 

       for(var i=0, length=keys.length; i<length; i++){ 
        var newArticle = new Article({title: req.body.Articles[keys[i]].title, 
               description: req.body.Articles[keys[i]].description 

        }); 

        newArticle.save(function (err){ 
         console.log(newArticle._id); // <--- !!!!!!! 
        }); 
       } 
       callback(null); 
      } 

     ], function (err, result) { 
      console.log('DONE!!!'); 
      res.send('200'); 
     }); 

我的问题:

1)代码的标线,我试图输出生成的文章的所有ID只提供I-时代的ID存放最后一篇文章(本例为第3条)。

2)问题1导致我无法在作者文档(存储在不同集合中)中创建新创建文章的引用的问题,因为我无法访问没有文章ID但是最后一个!?

3)有时候作者以及文章在数据库中被多次创建(两者之间存在巨大的时间差)!

感谢您提供任何建议,因为我缺乏创意。

伊戈尔

回答

0

不知道什么newLink是在你的代码,但你可以代替试试这个:

newArticle.save(function (err, newDoc){ 
    console.log(newDoc._id); // <--- !!!!!!! 
}); 
+0

谢谢你的提示,但实际上是一个错字。即使在调用newArticle._id时,输出将是(在上例中)三倍于第3条的documentID。 – 2014-09-28 09:56:28

+0

我知道使用'newArticle._id'会给你相同的输出,因为' .save()'调用。我在上面的示例中建议的是使用'.save()'回调的第二个参数,这样可以确保获得正确的'._id'。注意我把它称为'newDoc'而不是'newArticle'。 – JME 2014-09-28 12:56:49

+0

不错的一个。谢谢,它的作品。现在获取正确的数据=) – 2014-09-28 15:50:01