2016-03-17 40 views
0

我是Mongoose的新手...我无法保存/更新数组。用Mongoose保存/更新数组不起作用

当我创建谁与他的邮箱登录用户,我用的是这样的:

User.findOne({ 'local.email' : email }, function(err, user) { 

var newUser = new User(); 
var name = req.body.name; 

newUser.local.name = name; 
newUser.local.array = [1, 2]; 

newUser.save(function(err) { 
if (err) 
    throw err; 
    return done(null, newUser); 
}); 
}); 

它正常工作,用户保存!

但是,当我更新用户:

app.post('/change', function(req, res) { 

var newUser = new User(); 
newUser.isNew = false; 

newUser._id = req.user._id; 
var newname = req.body.name; 
newUser.local.array = [3, 4]; 

newUser.save(function(err) { 
if (err) 
    throw err; 
    return done(null, newUser); 
}); 
}); 

它不工作,控制台日志“VersionError:找不到匹配的文件”。 如果我在更新中注释local.array所在的行,它可以正常工作,用户将被更新。

这段代码有什么问题?

+1

您需要使用'findOne'来更新现有的用户文档,而不是再次调用'new User()'。否则,它将如何知道你正在更新哪个文件? – JohnnyHK

+0

你的第一个代码片段是错误的。 User.findOne({'local.email':email},function(err,user){'。你应该使用返回的'user'对象,或者创建一个新的,如果你不存在 – Thomas4019

回答