我正在发布一个数组,其中包含如下的name元素,“[training 1,training 2,training 3]”,这些数组元素有自己的'\u id'。我需要将这些元素的对象_id
保存到另一个具有ref的模型中。
var TrainingNameSchema = new Schema({
trainingname: {
type: String
}
});
var TrainingLevelSchema = new Schema({
levelname: {
type: String
},
trainingnames: [{
type: Schema.Types.ObjectId,
ref: 'TrainingName'
}]
});
我正在使用for循环保存它,代码如下,
var newLevel = {
levelname: req.body.groupname
};
var levarr = req.body.levtrainingnames;
new TrainingLevel(newLevel)
.save()
.then(function(lev){
for(var i = 0; i<levarr.length; i++){
TrainingName.findOne({
trainingname: levarr[i]
})
.then(function(name){
lev.trainingnames.push(name._id);
console.log(lev);
lev.save()
.then(function(doc){
console.log(doc);
res.redirect('/settings/trainings');
})
.catch(function(err){
console.log(err);
});
})
.catch(function(err){
console.log(err);
});
}
})
.catch(function(err){
console.log(err);
});
当i
console.log(doc)
时,它的输出是正确的,{ trainingnames:
[ 5a64e2dde4dde5080d38c48a,
5a64e49870b92c0834914605,
5a6501807432a00d6873c5f6 ],
_id: 5a66bab1869d0e032e643762,
levelname: 'Level A',
__v: 1 }
但当我检查数据库时,它重复了一遍,请帮忙,提前谢谢,
"_id" : ObjectId("5a66bab1869d0e032e643762"),
"trainingnames" : [
ObjectId("5a64e2dde4dde5080d38c48a"),
ObjectId("5a64e2dde4dde5080d38c48a"),
ObjectId("5a64e49870b92c0834914605"),
ObjectId("5a6501807432a00d6873c5f6"),
ObjectId("5a64e2dde4dde5080d38c48a"),
ObjectId("5a64e49870b92c0834914605"),
ObjectId("5a6501807432a00d6873c5f6")
],
"levelname" : "Level A",
"__v" : 3
最佳答案
试试这个,每次迭代都需要update
而不是save
。
new TrainingLevel(newLevel)
.save()
.then(function(lev){
for(var i = 0; i<levarr.length; i++){
TrainingName.findOne({
trainingname: levarr[i]
}).then(function(name){
lev.update({$push : {trainingnames : name._id}}, function(err, doc){
if(err) console.log(err);
console.log(doc);
})
}).catch(function(err){
console.log(err);
});
}
}).catch(function(err){
console.log(err);
}
);