node.js - Mongoose - 无法创建带有子模型的模型

标签 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;

最佳答案

我认为你可能会反过来这样做。如果您希望能够加载一个表单,然后填充联系人数据和个人数据(作为表单的一部分),那么您应该像这样创建您的表单架构:

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

然后,当您设计 API Controller 来加载表单时,您将使用如下内容:

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);
  }
});

关于node.js - Mongoose - 无法创建带有子模型的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421460/

相关文章:

node.js - 如何在 Node.js 或 Swift 的 url 中挂载主机前缀?

node.js - 使用 HBS(express-handlebars)检查两个字符串

node.js - 使用 Express.JS 发送额外的 http header

mysql - 尝试从我的服务器运行我的应用程序时出现奇怪的 Sequelize 错误

使用 TypeORM 的 Node.js 将错误的时区插入 Azure SQL 数据库

java - 使用java在mongodb中更新

node.js - Mongoose 预保存钩子(Hook)触发,但不保留数据

node.js - 检查 mongo 数据 key 是否存在

node.js - 在 Redis 中存储和检索坐标数据

javascript - 为什么 `lodash.map([' A'], String.prototype.toLowerCase.call)` 不起作用?