2016-04-22 47 views
1

這可能是關於mongodb中的_id的概念性問題。mongodb mongoose nodejs express4爲什麼自動在Object Array字段中插入_id?

我理解的MongoDB會自動插入_id場,如果你不設置鍵字段中document.In我的情況,我定義的字段作爲對象數組,我不知道爲什麼它總是在每個對象創建_id在此字段的Array中。

我很感激,如果有人能爲我澄清它。

貓鼬示範計劃的定義:

module.exports = mongoose.model("Application", { 
    Name: String, 
    Description: String, 
    Dependency: [ 
      { 
      App_id: { 
       type: mongoose.Schema.Types.ObjectId, 
       ref: 'Application' 
      }, 
      Priority: Number 
     } 
    ] 
}); 

這是一個更新操作,請求數據是:

{ _id: '571953e33f33c919d03381b5', 
    Name: 'A Test Utility (cmd)', 
    Description: 'A Test Utility (cmd)' 
    Dependency: 
    [ { App_id: '571953e33f33c919d03381b6', Priority: true }, 
    { App_id: '571953e33f33c919d03383da', Priority: 0 } ] 
} 

我使用此代碼更新

var id = req.body._id; 
    Application.findOneAndUpdate({ _id: id }, req.body, function (err, app) { 
     if (err) 
      res.send(err); 
     res.json(app); 
    });  

的更新但是mongodb中的文檔是:

{ 
    "_id" : ObjectId("571953e33f33c919d03381b5"), 
    "Name" : "A Test Utility (cmd)", 
    "Description" : "A Test Utility (cmd)", 
    "Dependency" : [ 
     { 
      "Priority" : 1, 
      "App_id" : ObjectId("571953e33f33c919d03381b6"), 
      "_id" : ObjectId("571a7f552985372426509acb") 
     }, 
     { 
      "Priority" : 0, 
      "App_id" : ObjectId("571953e33f33c919d03383da"), 
      "_id" : ObjectId("571a7f552985372426509aca") 
     } 
    ] 
} 

我只是不明白「Dependency」數組中的_id怎麼樣?

感謝。

回答

2

當您使用[{..}]時,意味着它在內部充當子模式,並且您知道如果您未在文檔中設置關鍵字段,MongoDB會自動插入_id字段。所以你需要強制插入沒有_id字段的文件。

需要在使用{_id:false}爲您的依賴陣列模式,而不_id

var ApplicationSchema = new mongoose.Schema({ 
    Name: String, 
    Description: String, 
    Dependency: [ 
     { 
      App_id: { 
       type: mongoose.Schema.Types.ObjectId, 
       ref: 'Application' 
      }, 
      Priority: Number, 
      _id: false 
     } 
    ] 
}); 

module.exports = mongoose.model("Application", ApplicationSchema); 
+0

感謝您的更新@xjtumalin通知插入 –