2014-09-27 81 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