Node.js mongodb中对象内部的更新字段

Node.js mongodb中对象内部的更新字段,node.js,mongodb,Node.js,Mongodb,我试图更新另一个对象中的一个对象,但当该对象更新时,将替换所有信息 结构 var userSchema = mongoose.Schema({ local : { email : {type: String, unique: true}, password : String } name: String }); 在更新之前 { name = 'foo', local {

我试图更新另一个对象中的一个对象,但当该对象更新时,将替换所有信息

结构

var userSchema = mongoose.Schema({

    local            : {
        email        : {type: String, unique: true},
        password     : String
    }
    name: String
});
在更新之前

{
    name = 'foo',
    local {
        email: "foo@foo.com"
    }
}
使用者

之后将进行更新

{
    name = 'foo',
    local {
        email: "foo@foo.com"
    }
}
这是我的疑问:

router.put('/:id', function(req, res) {

    User.findByIdAndUpdate(req.params.id, {
    $set: { name: req.body.name, local: {email: req.body.email} }
    }, { upsert: true },
    function(err, obj) {
        return res.json(true);
    });
});
在$set键中使用点表示法仅针对local的电子邮件属性,而不是更新整个本地对象:

尝试$set:{name:req.body.name,local.email:req.body.email}而不是$set:{name:req.body.name,local:{email:req.body.email}
router.put('/:id', function(req, res) {

    User.findByIdAndUpdate(req.params.id, {
        $set: { name: req.body.name, 'local.email': req.body.email }
    }, { upsert: true },
    function(err, obj) {
        return res.json(true);
    });
});