猫鼬-用objectid保存对象

时间:2018-07-12 04:40:38

标签: javascript node.js mongodb mongoose

这里我有两个模式:

var personSchema = Schema({
   _id: Schema.Types.ObjectId,
   name: String,
   job: {
       type: Schema.Types.ObjectId,
       ref: 'Job',
   }
});

var jobSchema = Schema({
   _id: Schema.Types.ObjectId,
   title: String,
});

var Job = mongoose.model('Job', jobSchema);
var Person = mongoose.model('Person', personSchema);

假设Job有一些记录:

[{
    "_id" : ObjectId("5b46d41e04cfc922949dcfda"),
    "Title": "Teacher"
}, ...]

当我要插入一些人对象时:

[{
     name: 'Peter',
     job: 'Teacher'
}, ...]

在每次保存之前,我是否需要找到作业的_id并将job字段转换为ObjectId类型?例如

Job.findOne({title: p.job}, (j) => {
    Person.save({name: p.name, job: j._id}).exec(()=>{
         // it's ok!
    )}
})

或者我可以使用中间件或填充函数来简化它?谢谢!

1 个答案:

答案 0 :(得分:1)

在保存人的同时,您需要工作。 因此,您可以按照以下步骤进行操作:

  1. 要么创建新工作,要么找到现有工作。
  2. 将找到的工作的对象_id字段分配给新的Person并保存。

例如代码

let person = new Person({
   name : 'TszHin'
});
Job.findOne({ title : 'Abc'})
.then(function(job){
  person.job = job._id;
  person.save();
});