2016-02-16 68 views
1

我有一個模型和一些子模型,它們通過父母的ID鏈接,但我不能創建父母,然後創建子模型,如果以相反方式創建子模型沒有任何聯繫。貓鼬 - 無法用子模型創建模型

這裏是我的代碼:

var mongoose = require('mongoose'); 

var personalDataSchema = new mongoose.Schema({ 
form_id : {type : mongoose.Schema.Types.ObjectId, ref : FormModel}, 
first_name : String, 
age  : Number, 
gender  : String, 
nationality: String, 
adress  : String, 
birth_date : String, 
CNP  : String 
}) 

var contactDataSchema = new mongoose.Schema({ 
form_id : {type : mongoose.Schema.Types.ObjectId, ref : FormModel}, 
phone  : String, 
mail  : String, 
facebook : String 
}) 

var formSchema = new mongoose.Schema({ 
_id : mongoose.Schema.Types.ObjectId 
}) 

var PersonalData = mongoose.model('PersonalData',personalDataSchema), 
ContactData = mongoose.model('ContactData',contactDataSchema), 
FormModel  = mongoose.model('FormModel',formSchema); 

module.exports = FormModel; 
+0

沒有絲毫的想法你在問什麼。你期望發生什麼? MongoDB不是**關係數據存儲,因此沒有內建的參照完整性處理。這應該是非常清楚的,但你似乎預計這會被強制執行。也許你應該考慮你正在使用錯誤的數據存儲來滿足你的期望。 –

+0

您正在嘗試使用PersonalData模型,而不是FormModel。它應該是'module.exports = PersonalData;',對嗎? – haotang

回答

1

我想你可反向做這個。如果你希望能夠加載一個窗體,然後有填入聯繫數據和個人數據(如表格的部分),那麼你應該創建窗體模式是這樣的:

var formSchema = new mongoose.Schema({ 
    contactData: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'ContactData' 
    }, 
    personaldata: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'PersonalData' 
    } 
}); 

然後,當你設計API控制器加載一個表單,你會使用類似這樣的:

var id = req.params.id; // or get the id from somewhere 
FormModel.findById(id) 
.populate('contactData personalData') 
.exec(function(err, form) { 
    if (err) { 
    next(err); // assuming you have error handling middleware 
    } else { 
    res.json(form); 
    } 
}); 
+0

謝謝,這似乎是工作。我無法弄清楚如何保存一個。 –

+0

1)創建ContactData文檔並將其ID保存在變量中 2)創建PersonalData文檔並將其ID保存在變量中 3)創建Form文檔並將兩個對象ID保存在適當的位置 – tutley

+0

'var form =新的FormModel({contactData:contactDataID, personalData:personalDataID }); form.save(function(err,form){... dostuff ...});' – tutley