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);