这是我的场景:
我有2个集合(表格):项目和学生(关系是多对多)。
我的模特是:
项目:
var ProjectSchema = new Schema({
name: {
type: String
},
description: {
type: String
},
user : {
type : Mongoose.Schema.Types.ObjectId,
ref : "User"
}
});
Mongoose.model('Project', ProjectSchema);
用户:
var Userchema = new Schema({
name: {
type: String
},
surname: {
type: String
},
project : {
type : Mongoose.Schema.Types.ObjectId,
ref : "Project"
}
});
Mongoose.model('User', UserSchema);
在我看来,我有2个输入,其中接收项目的名称和描述,然后有多选,其中选择1或多个用户为此项目。当我点击OK时:
如果我选择1个用户,我会尝试下一个,但只有功能:
exports.addUserProject = function(req, res) {
var project=new svmp.Project();
project.name=req.body.name;
project.description=req.body.description;
project.user=req.body.user[0]._id;
project.save(function(err,project){
if (err) {
return res.send(400, {
message : getErrorMessage(err)
});
} else {
res.jsonp(project);
}
})
};
我的BBDD的结果是下一个:
{“_ id”:ObjectId(“57a200a38fae140913ac5413”),“user”:ObjectId(“578f41ddb0641d961416c3f5”),“name”:“Project1”,“Description”:“Project1 Desc”,“__ v”:0} < / p>
感谢您的帮助
答案 0 :(得分:1)
首先在模式定义中,由于关系是多对多关系,因此应将ref
更改为引用对象的数组。例如,将user
的{{1}}属性更改为对象ID数组,如此,
projectSchema
对var ProjectSchema = new Schema({
name: {
type: String
},
description: {
type: String
},
user : [{
type : Mongoose.Schema.Types.ObjectId,
ref : "User"
}]
});
的{{1}}属性执行相同操作。
其次,在这一行project
;您只将第一个选定用户的userSchema
设置为用户,而忽略所有其他所选用户。这就是您的代码仅适用于一个用户的原因。相反,我建议您使用一个简单的循环将所有选定用户project.user=req.body.user[0]._id
推送到项目的_id
属性。您可以使用下面给出的_id
循环。
user
如果您愿意,也可以使用简单的forEach
执行此操作。
我相信上述建议应该可以解决您所描述的问题。