web-dev-qa-db-fra.com

Faire quelque chose si rien n'est trouvé avec la mangouste .find ()

Je stocke des données dans un mongodb et y accède avec js/nodejs et mongoose. Je peux utiliser .find () pour trouver quelque chose dans la base de données très bien, ce n'est pas un problème. Ce qui pose problème, c'est que s'il n'y a pas quelque chose, j'aimerais faire autre chose. Actuellement, c'est ce que j'essaie:

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);
    }
  });
});

Aucun de ceux-ci ne se déclenche lorsque je fais quelque chose où act.params ne serait pas dans l'index des pseudos. Je ne reçois rien à consoler du tout lorsque cela se produit, mais j'obtiens user.nick pour me connecter très bien quand il est réellement là. J'ai juste essayé de le faire en sens inverse comme ceci:

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');
    }
  });
});

mais cela n'a toujours pas enregistré nope. Qu'est-ce que j'oublie ici?

S'il ne le trouve pas, il saute simplement tout dans l'appel de recherche, ce qui est bien, sauf que je dois faire des choses par la suite s'il n'est pas là que je ne veux pas faire si c'est le cas. : /

32
Rob

Lorsqu'il n'y a pas de correspondance, find () renvoie [], tandis que findOne () renvoie null. Donc, utilisez soit:

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

ou:

Model.findOne( {...}, function (err, result) {
    if (err) { ... }
    if (!result) {
        // do stuff here
    }
}
82
weiyin
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);
    });
  }
});

c'est ce que j'ai trouvé pour travailler.

9
Rob

J'ai dû utiliser:

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

pour le faire fonctionner.

5
Julian Sutherland

Après avoir utilisé res.send(data) ou console.log(data) votre code retourne [] ou empty log/ empty res.send essayez ce code:

if (data === null) {
        console.log('record does not exist')
        // or do something
    }

exemple dans mon projet

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)
    }
})

note: D'autres exemples peuvent être mieux utilisés.

0
emrearabaci