2016-04-22 7 views
1

mongodbに_idについての概念的な質問があります。mongodb mongoose nodejs express4なぜオブジェクト配列フィールドに_idを自動的に挿入するのですか?

ドキュメントにキーフィールドを設定しないとmongodbが自動的に_idフィールドを挿入することを理解しています。私の場合、オブジェクトアレイとしてフィールドを定義しましたが、なぜオブジェクトが常に_idこのフィールドの配列で指定します。

誰かが私にそれを明確にすることができれば感謝します。

マングースモデルスキームの定義:

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") 
     } 
    ] 
} 

_idがどのように「依存関係」の配列に含まれているのか分かりません。

ありがとうございました。

答えて

2

[{..}]を使用すると、内部ではサブスキーマとして機能し、ドキュメントにキーフィールドを設定しないと、MongoDBは_idフィールドを自動的に挿入します。だから、_idフィールドなしで強制的に文書を挿入する必要があります。

@xjtumalin更新するためのご通知の_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

感謝せずに挿入するために、あなたの依存関係の配列スキーマの{_id:false}を使用する必要 –

関連する問題