2013-01-19 251 views
2

我有2種模式中貓鼬設置:貓鼬嵌套文檔

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" 
     } 
    ] 
    }, ...] 

現在,如果我更新job1和GET所有作業,作業1已更新(預算現在爲500)

[{ 
    "title": "job1", 
    "budget": 500, 
    "_id": "50fad6985edd968840000002", 
    "__v": 0 
    }, ...] 

但是作業1在客戶作業數組中保持不變。

[{ 
     "__v": 1, 
     "_id": "50f85695771aeeda08000001", 
     "name": "Customer1", 
     "jobs": [ 
      { 
      "_id": "50fad6985edd968840000002", 
      "budget": 100, 
      "title": "job1" 
      } 
     ] 
     }, ...] 

不要因此我需要搜索customer1表的工作陣列,並找到JOB1工作和更新還我每次更新或刪除或時間我完全做整個築巢東西走錯了路?

我得到在客戶的作業數組是一個對象數組,但我認爲他們可能是一些如何只是一份工作的參考副本而不是重複?

回答

15

如果您在此處使用嵌入式Job文檔的陣列,則它們是完全獨立的副本,並且由您決定將它們與單獨的jobs集合保持同步。

另一種方法是有Customerjobs場包含ObjectId引用'Job'數組,然後用貓鼬的query population填充它們點播,根據需要。

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

好的,謝謝,這似乎是一個更明智的方式來做到這一點 –