Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用嵌套层次结构更新嵌入文档?_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

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
。就是这样,谢谢!这不是我第一次被保留的词语等咬到。