使用express和mongo在mongodb中保存复杂的结构

时间:2019-04-21 18:54:57

标签: node.js mongodb express mongoose mongoose-schema

我是mongodb,node和express的新手。我正在尝试将这些数据保存在mongodb中。

我有如下的staff.model.js

let StaffSchema = new Schema({
    staffcode:String,
    firstname:String,
    lastname: String,
    type: String,
    department:String,
    dateofjoin:Date,
    lastworkingday:Date,
    teaching:[ {type:Schema.Types.ObjectId, ref:'Teaches'} ]
});

我还有另一个名为“教导”的模式,

let TeachesSchema = new Schema({
    standard:{type: Schema.Types.ObjectId, ref: 'Standard'},
    subjects:[{type: Schema.Types.ObjectId, ref: 'Subject'}]
});

另一种标准架构如下

let StandardSchema = new Schema({
    name:String,
    medium:String,
    section:String
});

另一个模式主题如下

let SubjectSchema = new Schema({
    name:{ type: String, required: true, max: 25 }
});

最后,我试图像这样将数据保存在mogodb中

exports.staff_create = function(req, res){
    let staff = new Staff({
        staffcode:req.body.staffcode,
        firstname:req.body.firstname,
        lastname: req.body.lastname,
        type: req.body.type,
        department:req.body.department,
        dateofjoin:req.body.dateofjoin,
        teaching:req.body.teaching
    });
    staff.save(function(err){
        if(err){
            return next(err);
        }
        res.send('Staff created successfully');
    });
};

用这样的输入从邮递员进行api调用

{
  "staffcode": "STF0003",
  "firstname": "Joh Doe",
  "lastname": "Moy",
  "type": "teaching",
  "department": "physics",
  "dateofjoin": "2018-06-01",
  "teaching": {
    "standard": {
      "_id": "5cb8ff551a1c1a2514fa467c",
      "name": "1",
      "medium": "English",
      "section": "A"
    },
    "subjects": [
      {
        "_id": "5cb8ed65c068b22f5489d050"
      },
      {
        "_id": "5cb8ed6bc068b22f5489d051"
      }
    ]
  }
}

这有什么问题?我无法在邮递员请求中获得成功回复。

1 个答案:

答案 0 :(得分:0)

您的模式设计来自关系数据库。但是,您可以使用populate来完成您的要求。

一种更好的方法是在某些地方使用嵌入式文档而不是引用来检查有关MongoDB relationships: embed or reference?的答案