2016-08-03 54 views
0

這是我的場景:保存倍數的對象在一次蒙戈(多對多貓鼬)

我有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個輸入,其中接收名稱和描述項目,然後有多個小組ct選擇1個或多個用戶爲這個項目。當我單擊確定時應該:

  1. 創建項目,並向用戶添加所選用戶作爲BBDD中的對象。
  2. 更新用戶,使用項目協調。

我試了下,但只有funcion如果我選擇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」:物件( 「57a200a38fae140913ac5413」 ), 「用戶」:物件( 「578f41ddb0641d961416c3f5」), 「名」: 「PROJECT1」, 「說明」: 「PROJECT1說明」, 「__ v」:0}

感謝您的幫助

回答

1

首先在模式定義中,由於關係是多對多的,因此應該將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來做到這一點。

我相信上面的建議應該解決您描述的問題。

+0

謝謝,爲我完美工作。 – JossephBot