Node.js $或使用猫鼬搜索

Node.js $或使用猫鼬搜索,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在尝试查找用户是否输入了重复的名称和/或电子邮件地址。我对Mongoose(以及MongoDb)是新手,但根据我所读到的,这似乎是正确的。然而,不管发生什么,它都会返回真值。如果我为其中一个单独查找,而不是作为$or,它似乎工作正常 // check if user exists var userExists = function(u, callback) { User.find({$or:[ {'username': u.username}, {'email': u.email}]}

我正在尝试查找用户是否输入了重复的名称和/或电子邮件地址。我对Mongoose(以及MongoDb)是新手,但根据我所读到的,这似乎是正确的。然而,不管发生什么,它都会返回真值。如果我为其中一个单独查找,而不是作为$or,它似乎工作正常

// check if user exists
var userExists = function(u, callback) {
  User.find({$or:[ {'username': u.username}, {'email': u.email}]} , function(err,user) {
    if (err) {      // err, so not sure if user exists
        callback(1);
        return;
        } 
    if (user) { // user, so return exists
        callback(1);
        return;
        } 
    //no error, no user
    callback(0);
    });
};

想法?

更新了检查
user.length
而不是它是否为空的方法。如果Mongoose(或MongoDB)未找到该文档,则不会返回null

// check if user exists
var userExists = function(u, callback) {
  User.find({$or:[ {'username': u.username}, {'email': u.email}]} , function(err,user) {
    if (err || user.length > 0) {     // user does not come back null, so check length
        callback(1);
        return;
    } 
    //no error, no user
    callback(0);
  });
};

你所说的“它返回真值”是什么意思
User.find
不返回布尔值。oops,现在添加了整个函数。啊,这更有意义,谢谢。您可以添加一些日志来查看回调中包含的
err
user
内容吗?噢,用户没有返回“null”-它只是空的。err:null user:Right,
findOne
null
用于不匹配的情况,这可能更适合您正在执行的操作。请记住mongo.find()返回一个游标,因此您只需检查游标长度,以检查是否找到用户not@Ajaybeni他使用的是猫鼬,所以
user
是一个数组而不是光标。