gpt4 book ai didi

javascript - 如何更新具有嵌套层次结构的嵌入文档?

转载 作者:行者123 更新时间:2023-12-03 12:13:25 24 4
gpt4 key购买 nike

我有一个嵌入式文档需要更新。除了一种情况之外,我已经设法使一切正常工作:我无法获取具有嵌套层次结构的嵌入式文档进行更新。这是我正在尝试执行的操作的示例:

console.log('Phone type: ' + req.body.phone.type); // prints, e.g., 'Phone type: Work'
console.log('Phone #: ' + req.body.phone.number); // prints, e.g., 'Phone #: 555-555-5555'

var updateData = {
"user.$.contact_info": {
email: req.body.email,
phone: {
type: req.body.phone.type,
number: req.body.phone.number
}
}
};
Group.update(
{ "user._id" : req.params.user_id },
{ $push : updateData },
function(err,data) {
console.log('Success!'); // I see the "Success!" message every time I save a record
}
);

架构:

var contactInfoSchema = mongoose.Schema({
created : {
type: Date,
default: Date.now
},
email : String
phone: {
type: String,
number: String
}
});

var userSchema = mongoose.Schema({
created : {
type: Date,
default: Date.now
},
contact_info : [contactInfoSchema]
});

var GroupSchema = mongoose.Schema({
created : {
type: Date,
default: Date.now
},
users : [userSchema]
});

我发现我可以创建记录,但只存储电子邮件地址,而不存储电话信息。检查控制台时,我可以看到正在发送电话类型和电话号码信息,但它只是没有在数据库中更新。我做错了什么?

最佳答案

“contactInfoSchema”中使用“type”关键字时出现的问题。你需要这个:

var contactInfoSchema = mongoose.Schema({
created : {
type: Date,
default: Date.now
},
email : String
phone: {
"type": { "type": String },
number: String
}
});

所以基本上 Mongoose 很困惑,因为你试图将“子文档”字段称为“类型”,并且它认为这是“电话”字段的数据“类型”。如上所述声明一切正常。

关于javascript - 如何更新具有嵌套层次结构的嵌入文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24846025/

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