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