一次保存多个对象 Mongo(多对多 Mongoose)

Save multiples Objects At Once Mongo(Many To Many Mongoose)

这是我的场景:

我有 2 个集合(表):项目和学生(多对多关系)。

我的模型是:

在我看来,我有 2 个输入,用于接收项目的名称和描述,然后进行多选,为该项目选择 1 个或多个用户。当我单击“确定”时应该:

  1. 创建项目,并将所有在BBDD中选择为对象的用户添加到用户。
  2. 更新用户,与项目关联。

我尝试下一个,但只有在我选择 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 }

感谢您的帮助

首先在您的架构定义中,由于关系是多对多的,您应该将 ref 更改为引用对象的数组。例如,将 projectSchemauser 属性 更改为像这样的对象 ID 数组,

var ProjectSchema = new Schema({
      name: {
        type: String            
      },
     description: {
       type: String                
      },
    user : [{
      type : Mongoose.Schema.Types.ObjectId,
      ref : "User"
     }]
   });      

userSchemaproject 属性 执行相同操作。

其次,在这一行project.user=req.body.user[0]._id;您仅将第一个选定用户的 _id 设置为用户,而忽略所有其他选定用户。这就是为什么您的代码只适用于一个用户。相反,我会建议您使用一个简单的循环将所有选定用户的 _id 推送到项目的 user 属性。您可以使用下面给出的 forEach 循环。

var selectedUsers = req.body.user;
selectedUsers.forEach(function(u){
  project.user.push(u._id)
})

如果您愿意,您也可以使用简单的 for loop 来完成此操作。

我相信以上建议应该可以解决您描述的问题。