2013-04-18 86 views
1

我有以下代碼:如何蒙戈嵌套模式更新文檔

add_new_patient : function(username,pname,pid,pdesc,callback){ 
        var find_md = function(){ 
         return function(err,pat){ 
         if (err){ 
         console.log('Error at adding patient: error at searching for users'); 
         callback(2);//In the callback method I'm passing I have specific behavior for error handling for error codes. 
         return; 
         } 
         if (pat.lenth > 0){ 
          console.log('searching for md'); 
          MD.find({'mdname':username},add_patient(pat)); 
         }else{ 
          console.log('Error at adding patient: no user found'); 
          callback(-1); 
          return; 
         } 
        }} 

        var add_patient = function(pat){ 
         return function(err,md){ 
         if (err){ 
          console.log('Error at adding patient: cannot find md'); 
          callback(-1); 
          return; 
         } 
        callback(0); 
        } 
       } 
       console.log('searching for user '+pid); 
       User.find({'name':pid},find_md()); 
} 

這些都是我的模式:

var mdSchema = mongoose.Schema({ 
    mdname : String, 
    pacients : [userSchema.ObjectId] 
}); 

var userSchema =mongoose.Schema({ 
    name : String, 
    password : String, 
    phone : String, 
    history : [{timestamp: Date , heart: Number }], 
    md : {mdname: String, contact: Number} 
}); 

正如你可以從代碼猜我想補充的患者到dms。首先,我搜索數據庫中的pid。如果我找到病人,我開始尋找mds。當我找到md時,我想將患者添加到md。現在我不知道如何添加它們。該模式顯示,我有一個schemaUser數組,它是患者的類型,但我不知道如何附加到它,而不知道如何根據從查詢中收到的數據從對象創建MD模型。另外我應該插入什麼樣的患者陣列?找到的患者或整個對象的_id?

+0

如果你清理了你的代碼縮進,這很有幫助,因爲很難說出你的代碼正在做什麼。 – JohnnyHK

+0

我更新了代碼。 – Pio

回答

0

我設法解決它以下列方式:

var add_patient = function(pat){ 
     return function(err,md){ 
      if (err){ 
       console.log('Error at adding patient: cannot find md'); 
       callback(-1); 
       return; 
      } 
      var query = {mdname: md.mdname}; 
      console.log(md); 
      var doThis = { $addToSet: { patients: pat._id } }; 
      console.log(query); 
      MD.update(query,doThis,done_adding()); 
     } 
    } 

    var done_adding = function(){ 
     return function(err,dat){ 
      if (err){ 
       console.log('Error at the end of adding new patient!'); 
       callback(-1); 
       return; 
      } 
      console.log('new patient added'); 
      callback(0); 
     } 

那麼這樣做是:當我有MD給誰我想補充患者/用戶我用的更新方法,用$ addToSet操作,所以我將有一組與md相關的患者。我不知道爲什麼,但是相同的代碼在$ push參數下不適用於我。然後什麼都沒有發生,當我將upsert選項設置爲true時,我的整個數據庫記錄被id覆蓋。