Javascript 如何使用嵌套层次结构更新嵌入文档?
我有一个需要更新的嵌入式文档。除了一个场景外,我已经设法让所有东西都正常工作了:我无法获取嵌套层次结构的嵌入式文档进行更新。下面是我尝试做的一个例子:Javascript 如何使用嵌套层次结构更新嵌入文档?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一个需要更新的嵌入式文档。除了一个场景外,我已经设法让所有东西都正常工作了:我无法获取嵌套层次结构的嵌入式文档进行更新。下面是我尝试做的一个例子: 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-55
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基本上是混乱的,因为您试图调用“子文档”字段“类型”,它认为这是字段“phone”的数据“类型”。如上所述,一切正常。您是否可以编辑您的问题,将
组的架构包括在内?
?这里的文档结构和架构是什么?$push和其他语法的使用意味着“user”实际上是一个数组,contact_info也是。是,“用户”和“联系人信息”都是数组。我在将新数据推送到这些阵列时没有遇到问题。我遇到的唯一问题是将数据添加到phone.type
和phone.number
。就是这样,谢谢!这不是我第一次被保留的词语等咬到。