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)有時候作者以及文章在數據庫中被多次創建(兩者之間存在巨大的時間差)!
感謝您提供任何建議,因爲我缺乏創意。
伊戈爾
謝謝你的提示,但實際上是一個錯字。即使在調用newArticle._id時,輸出將是(在上例中)三倍於第3條的documentID。 – 2014-09-28 09:56:28
我知道使用'newArticle._id'會給你相同的輸出,因爲' .save()'調用。我在上面的示例中建議的是使用'.save()'回調的第二個參數,這樣可以確保獲得正確的'._id'。注意我把它稱爲'newDoc'而不是'newArticle'。 – JME 2014-09-28 12:56:49
不錯的一個。謝謝,它的作品。現在獲取正確的數據=) – 2014-09-28 15:50:01