Node.js 猫鼬嵌套文档

Node.js 猫鼬嵌套文档,node.js,mongoose,Node.js,Mongoose,我在mongoose中设置了两个模式: var Job = new mongoose.Schema({ title: String, budget: Number }); var JobModel = mongoose.model('Job', Job); var Customer = new mongoose.Schema({ name: String, jobs: [Job] }); var CustomerModel = mongoose.model(

我在mongoose中设置了两个模式:

var Job = new mongoose.Schema({
    title: String,
    budget: Number
});

var JobModel = mongoose.model('Job', Job);

var Customer = new mongoose.Schema({
    name: String,
    jobs: [Job]
});

var CustomerModel = mongoose.model('Customer', Customer);
客户模型有一系列工作模型

我正在添加一个新工作,如下所示:

app.post('/api/jobs', function(req, res){

    var job = new JobModel({
        title: req.body.title,
        budget: req.body.budget
    });

    job.save(function(err){
        if(!err){
            CustomerModel.findById(req.body.customerId, function(err, customer){
                if(!err){
                    customer.jobs.push(job);
                    customer.save(function(err){
                        if(!err){
                            return console.log('saved job to customer');
                        }
                    });
                }
            });
            return console.log('created job');

        } else {
            return console.log(err);
        }
    });

    return res.send(job);
});
当我添加一份新工作并获得我认为正确的所有客户时:

[{
    "__v": 1,
    "_id": "50f85695771aeeda08000001",
    "name": "Customer1",
    "jobs": [
      {
        "_id": "50fad6985edd968840000002",
        "budget": 100,
        "title": "job1"
      }
    ]
  }, ...]
现在,如果我更新了作业1并获得了所有作业,则作业1已更新(预算现在为500)

但是客户作业数组中的作业1保持不变

 [{
        "__v": 1,
        "_id": "50f85695771aeeda08000001",
        "name": "Customer1",
        "jobs": [
          {
            "_id": "50fad6985edd968840000002",
            "budget": 100,
            "title": "job1"
          }
        ]
      }, ...]
因此,我是否需要搜索Customer1的作业数组,找到job1作业,并在每次更新或删除时更新该作业,或者我是否完全以错误的方式执行整个嵌套操作


我知道customer中的jobs数组是一个对象数组,但我认为它们可能只是job的参考副本,而不是副本???

如果您在这里使用
job
文档的嵌入式数组,它们是完全独立的拷贝,由您来保持它们与单独的
作业
集合的同步

另一种方法是让
Customer
jobs
字段包含对
'Job'
ObjectId
引用数组,然后根据需要使用Mongoose按需填充它们

jobs: [{type: Schema.Types.ObjectId, ref: 'Job'}]
jobs: [{type: Schema.Types.ObjectId, ref: 'Job'}]