Mongoose - 无法使用子模型创建模型

时间:2016-02-16 00:10:25

标签: node.js mongodb express mongoose database

我有一个模型和一些子模型,它们是通过父母的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;

1 个答案:

答案 0 :(得分: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);
  }
});