繁体   English   中英

如何使用嵌套层次结构更新嵌入式文档?

[英]How do I update an embedded document with a nested hierarchy?

我有一个需要更新的嵌入式文档。 除了一种情况,我设法使所有工作正常:我无法获取具有嵌套层次结构的嵌入式文档来进行更新。 这是我尝试做的一个例子:

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

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

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

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

因此,由于您试图将“子文档”字段称为“类型”,所以基本上猫鼬感到困惑,它认为这是“电话”字段的数据“类型”。 宣布以上一切工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM