2012-03-12 6 views
22

Я храню некоторые данные в mongodb и получаю его с помощью js/nodejs и mongoose. Я могу использовать .find(), чтобы найти что-то в базе данных просто отлично, это не проблема. В чем проблема, если нет чего-то, я бы хотел сделать что-то еще. В настоящее время это то, что я пытаюсь:Сделайте что-нибудь, если ничего не найдено с .find() mongoose

UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log(err) }; 
    users.forEach(function (user) { 
    if (user.nick === null) { 
     console.log('null'); 
    } else if (user.nick === undefined) { 
     console.log('undefined'); 
    } else if (user.nick === '') { 
     console.log('empty'); 
    } else { 
     console.log(user.nick); 
    } 
    }); 
}); 

Ни один из этого огня, когда я что-то где act.params не будет в индексе нику. Я не получаю ничего, чтобы консоль вообще, когда это случается, но я действительно получаю user.nick, чтобы регистрироваться только отлично, когда это на самом деле там. Я просто попытался сделать это в обратном порядке, как это:

UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log('noooope') }; 
    users.forEach(function (user) { 
    if (user.nick !== '') { 
     console.log('null'); 
    } else { 
     console.log('nope'); 
    } 
    }); 
}); 

, но это еще не войти nope. Что мне здесь не хватает?

Если он не находит его, он просто пропускает все в поиске, что хорошо, за исключением того, что мне нужно делать что-то потом, если этого не происходит, если я не хочу этого делать. :/

ответ

63

Когда нет совпадений, поиск() возвращает [], а findOne() возвращает null. Так как использование:

Model.find({...}, function (err, results) { 
    if (err) { ... } 
    if (!results.length) { 
     // do stuff here 
    } 
} 

или:

Model.findOne({...}, function (err, result) { 
    if (err) { ... } 
    if (!result) { 
     // do stuff here 
    } 
} 
+5

Сделал это для объяснения разницы в том, что возвращается между 'find()' и 'findOne()' и ответом! – Rob

8
UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log(err) }; 
    if (!users.length) { //do stuff here }; 
    else { 
    users.forEach(function (user) { 
     console.log(user.nick); 
    }); 
    } 
}); 

- это то, что я нашел для работы.

+0

это не работает для меня, только если (users.length!) –

+1

вещей должно быть изменено с 2012 года я постараюсь это когда я вернусь домой, и если это не сработает, а users.length, я отредактирую ответ, чтобы включить его. – Rob

5

я должен был использовать:

if(!users.length) { //etc } 

, чтобы заставить его работать.

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