mongodb mongoose忽略来自查询的当前用户

时间:2013-12-10 04:06:16

标签: node.js mongodb mongoose

我正在使用我网站的“编辑用户个人资料”页面。当用户编辑其用户名并按“保存”时,我想首先检查并查看是否有其他用户首先拥有此用户名。

User.findOne({'username' : newUsername }, function(err, user){
    if (!user){ //no user exists with this name
        //code for changing current user's name to newUsername
    } else { //a user exists with this name
        //code for returning to the edit page, and displaying error message to user
    }
});

问题是我将用户名保持不变(并编辑不同的值,如电子邮件)。当它查询用户名时,它会在mongodb上提取我的文档,因此它不会改变任何内容(因为用户存在!)。如何完全从查询中删除特定文档?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想抽象你的方法,以便它可以用来改变任何个人资料属性,而不仅仅是用户名?

您可以做的是根据用户正在更改的字段动态创建查询地图。

例如,如果您的用户想要更改其电子邮件字段:

(req.query.type ==用户试图更改的字段)

(req.query.value ==用户尝试更改的字段值)

var query = {};

switch(req.query.type)  // Type is username, email, any profile field
{
case 'username':
    query['username'] = req.query.value  // value of the profile field
    break;
case 'email':
    query['email] = req.query.value
    break;
default:
    break;
}

User.findOne(query, function(err, user) {  // Query will differ depending on inputs
    if (!user) { //no user exists with the type
        //code for changing current user's info
    } else { //a user exists with this name
        //code for returning to the edit page, and displaying error message to user
    }
});