下面是我的代码片段,我首先搜索笔记集,看看是否其中任何一个包含我正在更改当前会话的用户名的用户名。如果用户名尚未使用,则可能会更改为该用户名,因此我更改了当前会话的用户名,然后我将每个注释更新为此新用户名,然后显示changesuccess.jade文件。但是,当我运行代码时,一切似乎运行正常,每个注释的用户名都不会改变。我觉得这是由于第5行的find()方法。任何帮助将不胜感激!
router.post('/changeusername',function(req, res) {
var newUsername = req.body.username;
var user = req.session.username;
var userFound = notesCollection.find( { owner: newUsername } )
var results = function(infoInput) {
res.render("changedUser.jade", {title: "Username Change",
info: infoInput});
}
var checkChange = function(err) {
if (err) {
results("Username change failed!");
} else {
results("Username changed!");
}
}
console.log(userFound);
if (!userFound.length) {
notesCollection.update({ owner: user },
{ owner: newUsername},
{ multi: true },
checkChange);
} else {
res.render("changedUser.jade", {title: "Username Change",
info: "Username change failed!"});
}
});
答案 0 :(得分:1)
如果我正确理解您的问题,您正在尝试更新mongodb中的集合,并且它没有得到更新。 所以问题在于你调用mongoose#update的方式。
由于您要更新“所有者”,您应该使用mongodb#$set
Mongoose也在条件中支持相同的 $ set 运算符。
所以对你的案子进行一点修改:
var conditions = { owner: user }
, update = { $set: { owner: newUsername }}
, options = { multi: true };
notesCollection.update(conditions, update, options, callback);
function callback (err, numAffected) {
// numAffected is the number of updated documents
})
所以现在就试试吧。