Сделайте что-нибудь, если ничего не найдено с .find() mongoose
Я храню некоторые данные в mongodb и получаю его с помощью js/nodejs и mongoose. Я могу использовать .find(), чтобы найти что-то в базе данных просто отлично, это не проблема. В чем проблема, если нет чего-то, я бы хотел сделать что-то еще. В настоящее время это то, что я пытаюсь:
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
. Что мне здесь не хватает?
Если он не находит его, он просто пропускает все в вызове find, что хорошо, за исключением того, что мне нужно делать что-то потом, если это не так, что я не хочу делать, если это так.:/
Ответы
Ответ 1
Если совпадений нет, find() возвращает []
, а 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
}
}
Ответ 2
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);
});
}
});
- это то, что я нашел для работы.
Ответ 3
Мне пришлось использовать:
if(!users.length) { //etc }
чтобы заставить его работать.
Ответ 4
После того как вы используете res.send(data)
или console.log(data)
ваш код возвращает []
или empty log/empty res.send
попробуйте этот код:
if (data === null) {
console.log('record does not exist')
// or do something
}
пример в моем проекте
router.post('/updated-data', (req, res, next) => {
const userName = req.body.userName;
const newUserName = req.body.newUserName;
User.findOneAndUpdate({userName: userName}, {userName: newUserName}, {new: true}, (err, data) => {
if (err) {
console.log(err)
} else if (data === null || !data) {
res.send('kullanıcı bulunamadı')
} else {
console.log(newUserName)
res.send(data)
}
})
примечание: другие примеры могут быть более полезными.
Ответ 5
Использовать этот.
if(!users) {
res.send({message: "User not found"});
}else {
res.send({message: "User found"});
}