2015-08-05 4 views
0

Я использую MongoDB для сохранения данных для пользователей приложения в:Mongoose не работает с двойными кавычками?

mongoose.connect(dBAddress, function(err) { 
    if (err) { 
     console.log('WARNING: Cannot connect to mongoDB at: ' + dBAddress); 
    } else { 
     dBConnected = true; 
     console.log('Connected to mongoDB at: ' + dBAddress); 
    } 
}); 
var userSchema = new mongoose.Schema({ 
    'userName': String, 
    'password': String, 
    'userId': String, 
    'lastModificationTime': {type: String, default: Common.getCurrentFormanttedTime()}, 
    'createdTime': {type: String, default: Common.getCurrentFormanttedTime()} 
}); 
User = mongoose.model('User', userSchema); 

И я вставить данные как:

 var newUser = { 
      'userName': newUserInfo.userName, 
      'password': newUserInfo.password, 
      'userId': newUserId, 
      'lastModificationTime': Common.getCurrentFormanttedTime(), 
      'createdTime': Common.getCurrentFormanttedTime() 
     }; 
     var user = new User(newUser); 
     user.save(function(err) { 
      if (err) { 
       console.log(err); 
       console.log('There is a problem saving the user info'); 
      } else { 
       console.log('A new user saved: '); 
       console.log(newUser); 
      } 
     }); 

Теперь я хочу, чтобы проверить, есть еще один документ с тем же значением userName поле или нет:

var keyValueExists = function(key, value) { 
    var exists = false; 
    User.count({key: value}, function(err, count) { 
     if (err) { 
      console.log(err); 
      console.log('Problem with `.find` function'); 
     } else { 
      console.log('count: ' + count); 
      exists = (count !== 0); 
     } 
    }); 
    return exists; 
}; 

Теперь проблема заключается в том, что эта последняя функция никогда не возвращает true! Например, давайте предположим, что у нас есть этот документ в нашей коллекции:

{ 
"userName": "user1" 
} 

(Примечание: это результат выполнения команды Монго оболочки: db.users.find())

Когда мы называем эту функцию с этими параметрами: keyValueExists('userName','user1') возвращает false, но когда вместо 'userName' I hardcode userName (без кавычек) это работает!

Почему это происходит? и как я могу избавиться от этого?

ответ

3

Вы должны изменить свою keyValueExists функцию следующим образом:

var keyValueExists = function(key, value, callback) { 
    var exists = false; 
    var query = {}; query[key] = value; 

    User.count(query, function(err, count) { 
     if (err) { 
      console.log(err); 
      console.log('Problem with `.find` function'); 
     } else { 
      console.log('count: ' + count); 
      exists = (count !== 0); 
     } 

     callback(err, exists); 
    }); 
}; 

keyValueExists('userName','user1', function (err, isExists) { 
    // your logic 
}); 

В коде запрос на MongoDB является {key: 'user1'} вместо {userName: 'user1'} поскольку объект обозначения stringifies

+0

Было бы хорошо, если бы вы объяснили, что в противном случае было бы отправляется как '{" key ":" user1 "}', поскольку строит обозначение объекта. Но это правда, что он в основном правильный. –

+0

Другая проблема с этим кодом заключается в том, что он имеет асинхронные вызовы ('count'), которые заставляют его сразу же возвращать' false', не считая результат обратно из mongoDB. –

+0

Спасибо за указание. Я исправил это. –

Смежные вопросы