我有一个需要更新的嵌入式文档。除了一个场景之外,我已经成功地完成了所有工作:我无法获得具有嵌套层次结构的嵌入式文档以进行更新。以下是我尝试做的一个例子:
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]
});
我发现我可以创建记录,但只存储电子邮件地址,而不是电话信息。检查控制台时,我可以看到正在发送电话类型和电话号码信息,但它不会在数据库中更新。我做错了什么?
答案 0 :(得分:1)
使用“type”关键字在“contactInfoSchema”中出现的问题。你需要这个:
var contactInfoSchema = mongoose.Schema({
created : {
type: Date,
default: Date.now
},
email : String
phone: {
"type": { "type": String },
number: String
}
});
所以基本上mongoose很困惑,因为你试图将“子文档”字段称为“类型”,并且它认为这是“电话”字段的数据“类型”。如上所述,一切正常。