2016-03-21 16 views
0

我將打破這個問題,以確保我已經解釋得很好。爲一個自定義對象實現一個Mongoose PUT到一個複雜的模式

我的web應用程序正在使用MEAN.js,在這種情況下,我正在實施貓鼬服務器端控制器中的更新功能。使用 此架構:

客戶端角控制器代碼工作正常,並且它發送我的權利對象來將其插入的mongodb

我具有由其他相關架構對象中的自定義對象的陣列數據庫,它表示引用任務對象的更新列表,TaskState對象中的更改以及發生的時間更新。

tupdates:[{ 
     task:{ 
      type: Schema.ObjectId, 
      ref: 'Task' 
     }, 
     tstate:{ 
      type: Schema.ObjectId, 
      ref: 'Tstate' 
     }, 
     startedat: Date, 
     stoppedat: Date, 
     updatedby:{ 
      type: Schema.ObjectId, 
      ref: 'User' 
     }, 
    }] 

我實施了將環在REQ對象陣列上方,併爲陣列中的每個更新創建自定義對象,並最終將其插入到數據庫中的功能。 服務器端貓鼬控制器

var mongoose = require('mongoose'), 
Job = mongoose.model('Job'); 
    exports.update = function(req, res){ 
    var job = req.job; 

    //check for updates 
    if(req.body.tupdates.length>0){ 
    for (var j=0; j<req.body.tupdates.length; j++){ 

     var theobj = req.body.tupdates[j]; 
     var tupdate = ({ 
      task : theobj.task._id, 
      tstate: theobj.tstate._id 
     }); 
job.tupdates.push(tupdate); 
     } 
    } 
    job.save(function(err){ 
     if(err){ 
      return res.status(400).send({ 
       message: getErrorMessage(err) 
      }); 
     }else{ 
      res.json(job); 
     } 
    }); 
};enter code here 

的數據被持久化到數據庫中,問題是,與對象ID的附加_id值I具有用於將插入REQ陣列中的每個更新無附圖如下:

db.jobs.find() 
{ "_id" : ObjectId("56eff14d4b343c7f0a71f33c"), "creator" : ObjectId("55ddd115a2904424680263a0"), "title" : "Job1", "tupdates" : [ { "task" : ObjectId("567a9c4b90f3ccd10b0e7099"), "tstate" : ObjectId("5693bb0f804936f167fe9ec2"), *"_id" : ObjectId("56eff38e095a2fa41312d876")*} ]} 

我添加了這些星星來表示帶有ObjectId引用的_id值,它被添加到我在服務器端控制器中創建的對象中,每當我對同一對象執行更新時,問題仍然存在。它後來創建了500個錯誤,爲了讓這個功能在生產環境中很好地工作,我們必須忽略這些錯誤,我很感激幫助,認爲這是我需要做的一個java腳本調整。

回答

1

默認情況下,貓鼬會將_id字段添加到數組元素(如果它們是對象)。 只需添加_id: false到您的模式:

tupdates:[{ 
     _id: false, 
     task:{ 
      type: Schema.ObjectId, 
      ref: 'Task' 
     }, 
     tstate:{ 
      type: Schema.ObjectId, 
      ref: 'Tstate' 
     }, 
     startedat: Date, 
     stoppedat: Date, 
     updatedby:{ 
      type: Schema.ObjectId, 
      ref: 'User' 
     }, 
    }] 
+0

那正是它,謝謝湯姆 –

+0

測試它後,它的作品第一次我把一個新的更新,第二次它插入一個空如下 –

+0

它添加一個空在第一次更新發生後自動如下, {「_id」:ObjectId(「56f053cd7e4ca6602e208d91」),「title」:「job1」,「tupdates」:[{「task」:ObjectId(「567a9c6690f3ccd10b0e709a」),「tstate 「:ObjectId(」5693bb0f804936f167fe9ec2「)},null,{」task「:ObjectId(」567a9c4b90f3ccd10b0e7099「),」tstate「:ObjectId(」5693bb0f804936f167fe9ec2「)}],」tasks「:[ObjectId(」567a9c4b90f3ccd10b0e7099「),ObjectId (「567a9c6690f3ccd10b0e709a」),ObjectId(「567 a9c7f90f3ccd10b0e709b「)]} –

相關問題