2014-09-26 19 views
0

我试图更新另一个对象,但更新对象时替换所有信息。在MongoDB中更新对象内的字段

结构

var userSchema = mongoose.Schema({ 

    local   : { 
     email  : {type: String, unique: true}, 
     password  : String 
    } 
    name: String 
}); 

之前更新

用户

{ 
    name = 'foo', 
    local { 
     email: "[email protected]", 
     password: "foopass" 
    } 
} 

后更新

{ 
    name = 'foo', 
    local { 
     email: "[email protected]" 
    } 
} 

这是我的查询:

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); 
    }); 
}); 
+0

尝试'$组:{名称:req.body.name“ local.email“:req.body.email}而不是'$ set:{name:req.body.name,local:{email:req.body.email}}' – 2014-09-26 16:06:31

回答

0

使用点符号在$set关键目标,而不是更新整个local对象只是localemail属性:

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); 
    }); 
}); 
+0

没关系,现在正在工作。谢谢 – user3902406 2014-09-26 16:15:15