用户名没有使用MongoDB更新功能正确更改?

时间:2015-03-09 01:09:07

标签: javascript mongodb express

下面是我的代码片段,我首先搜索笔记集,看看是否其中任何一个包含我正在更改当前会话的用户名的用户名。如果用户名尚未使用,则可能会更改为该用户名,因此我更改了当前会话的用户名,然后我将每个注释更新为此新用户名,然后显示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!"});
    }
});

1 个答案:

答案 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
})

所以现在就试试吧。