mongodb mongoose nodejs express4为什么自动在Object Array字段中插入一个_id?

这可能是关于mongodb中_id概念性问题。

我知道mongodb会自动插入一个_id字段,如果你没有在文档中设置关键字段。在我的情况下,我定义了一个字段为对象数组,我不知道为什么它总是在这个数组中的每个对象中创build一个_id领域。

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

mongoose模型scheme定义:

 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是怎么来的?

谢谢。

当你使用[{..}]这意味着它内部充当一个子模式,你知道,如果你没有在文档中设置关键字段,MongoDB会自动插入一个_id字段。 所以你需要强制插入没有_id字段的文件。

需要使用{_id:false}来为您的Dependency数组模式插入_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);