Подтвердить что ты не робот

Сделайте что-нибудь, если ничего не найдено с .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, что хорошо, за исключением того, что мне нужно делать что-то потом, если это не так, что я не хочу делать, если это так.:/

4b9b3361

Ответ 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"});
}