web-dev-qa-db-ja.com

エントリがデータベースに存在するかどうかを確認する方法を続編します

Node.jsのSequelizeを使用して、特定のIDのエントリがデータベースに存在するかどうかを確認する必要があります

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

Ifステートメントでこの関数を呼び出しますが、結果は常に未定義です

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

あなたは返さない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) {
        // ...
    }
});
9
alecxe

countを使用してレコードの存在を確認することは好ましくありません。ブール値を取得したいだけで、存在する場合はtrue、そうでない場合はfalseを取得する場合、100万件のレコードの類似性があると仮定します。

findOneは、一致する場合、最初の値でジョブを完了させます。

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

とにかくSequelizeは約束を中心に設計されているため、 alecxeの答え はおそらく最も理にかなっていますが、代替手段を提供するために、コールバックを渡すこともできます。

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

数えて見つけることができます。

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

Doc リンク、v5ベータリリース

1
Max Sherbakov

@ alecxeによる答え がいくつかのインスタンスで信頼できないことがわかったので、ロジックを微調整しました。

function isIdUnique (id, done) {
  db.Profile.count({ where: { id: id } })
  .then(count => {
    return (count > 0) ? true : false
  });
}
0
Wayne Smallman