【问题标题】:Mongoose - Cannot create model with submodels [closed]Mongoose - 无法使用子模型创建模型[关闭]
【发布时间】:2017-07-30 14:23:46
【问题描述】:

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

【问题讨论】:

  • 根本不知道你在问什么。你期望会发生什么? MongoDB 不是关系数据存储,因此没有内置的引用完整性处理。这应该很清楚,但是您似乎希望以某种方式执行此操作。也许您应该考虑使用错误的数据存储来满足您的期望。
  • 您正在尝试使用 PersonalData 模型,而不是 FormModel。应该是module.exports = PersonalData;吧?

标签: node.js mongodb express mongoose database


【解决方案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);
  }
});

【讨论】:

  • 谢谢,这似乎工作。不过我不知道如何保存。
  • 1) 创建 ContactData 文档并将其 ID 保存在变量中 2) 创建 PersonalData 文档并将其 ID 保存在变量中 3) 创建 Form 文档并将两个对象 ID 保存在适当的位置
  • var form = new FormModel({ contactData : contactDataID, personalData : personalDataID }); form.save(function(err, form){...dostuff...});
猜你喜欢
  • 1970-01-01
  • 2013-09-27
  • 2016-06-08
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 2018-05-31
相关资源
最近更新 更多