javascript - Mongoose - 使用 objectid 保存对象

标签 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. 创建新工作/寻找现有工作。
  2. 将找到的工作的 objects _id 字段分配给您的新 Person 并保存。

示例代码

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

关于javascript - Mongoose - 使用 objectid 保存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51297406/

相关文章:

javascript - 如何使用 nodeJS 从 JSON 对象中删除项目?

javascript - 将过滤后的数据从 php 保存到 Excel

node.js - 如何在远程服务器上运行多个 mongodb 数据库

javascript - 在 PHP 中创建启用和禁用按钮

node.js - 如何从 firebase 存储发送附件并使用 node.js 中的 mailgun 服务将其发送到电子邮件

javascript - Telegram bot api 无法限制用户 24 小时

javascript - 捕获错误 : getaddrinfo ENOTFOUND using winston

c# - MongoDB C# - 为不存在的元素获取 BsonDocument

javascript - 推送元素时检查元素之前的数组

javascript - 改进我们的 JavaScript 错误报告