web-dev-qa-db-fra.com

Comment vérifier si une entrée existe dans la base de données

Je dois vérifier si une entrée avec un ID spécifique existe dans la base de données à l'aide de Sequelize dans Node.js

  function isIdUnique (id) {
    db.Profile.count({ where: { id: id } })
      .then(count => {
        if (count != 0) {
          return false;
        }
        return true;
      });
  }

J'appelle cette fonction dans une instruction if mais le résultat est toujours indéfini 

if(isIdUnique(id)){...}
11
mr. Holiday

Vous ne retournez pas à partir de la fonction isIdUnique:

function isIdUnique (id) {
    return db.Profile.count({ where: { id: id } })
      .then(count => {
        if (count != 0) {
          return false;
        }
        return true;
    });
}

isIdUnique(id).then(isUnique => {
    if (isUnique) {
        // ...
    }
});
7
alecxe

Je ne préfère pas utiliser count pour vérifier l'existence d'un enregistrement. Supposons que vous ayez des similitudes pour des centaines de millions d'enregistrements, pourquoi les compter tous si vous voulez simplement obtenir une valeur booléenne, true s'il existe false sinon?

findOne fera le travail à la première valeur quand il y a correspondance.

const isIdUnique = id =>
  db.Profile.findOne({ where: { id} })
    .then(token => token !== null)
    .then(isUnique => isUnique);
11
Jalal

Comme Sequelize est conçu autour de promesses de toute façon, la réponse d’alecxe a probablement du sens, mais pour offrir une alternative, vous pouvez également transmettre un rappel:

function isIdUnique (id, done) {
    db.Profile.count({ where: { id: id } })
      .then(count => {
        done(count == 0);
      });
  }
}

isIdUnique(id, function(isUnique) {
  if (isUnique) {
    // stuff
  }
});
1
Drazen Bjelovuk

Vous pouvez compter et trouver.

    Project
  .findAndCountAll({
     where: {
        title: {
          [Op.like]: 'foo%'
        }
     },
     offset: 10,
     limit: 2
  })
  .then(result => {
    console.log(result.count);
    console.log(result.rows);
  });

Doc link, version bêta de la v5

0
Max Sherbakov