gpt4 book ai didi

node.js - mongodb mongoose nodejsexpress4 为什么会自动在对象数组字段中插入_id?

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:15 26 4
gpt4 key购买 nike

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

我知道如果你没有在文档中设置关键字段,mongodb会自动插入一个_id字段。在我的例子中,我将一个字段定义为对象数组,我不知道为什么它总是在该字段的数组中的每个对象中创建一个_id

如果有人能为我澄清,我将不胜感激。

Mongoose 模型方案定义:

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

这是一个Update操作,请求数据为:

{ _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} 来插入依赖项数组架构,而无需 _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);

关于node.js - mongodb mongoose nodejsexpress4 为什么会自动在对象数组字段中插入_id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36802445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com