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)){...}
あなたは返さない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) {
// ...
}
});
countを使用してレコードの存在を確認することは好ましくありません。ブール値を取得したいだけで、存在する場合はtrue、そうでない場合はfalseを取得する場合、100万件のレコードの類似性があると仮定します。
findOneは、一致する場合、最初の値でジョブを完了させます。
const isIdUnique = id =>
db.Profile.findOne({ where: { id} })
.then(token => token !== null)
.then(isUnique => isUnique);
とにかくSequelizeは約束を中心に設計されているため、 alecxeの答え はおそらく最も理にかなっていますが、代替手段を提供するために、コールバックを渡すこともできます。
function isIdUnique (id, done) {
db.Profile.count({ where: { id: id } })
.then(count => {
done(count == 0);
});
}
}
isIdUnique(id, function(isUnique) {
if (isUnique) {
// stuff
}
});
数えて見つけることができます。
Project
.findAndCountAll({
where: {
title: {
[Op.like]: 'foo%'
}
},
offset: 10,
limit: 2
})
.then(result => {
console.log(result.count);
console.log(result.rows);
});
Doc リンク、v5ベータリリース
@ alecxeによる答え がいくつかのインスタンスで信頼できないことがわかったので、ロジックを微調整しました。
function isIdUnique (id, done) {
db.Profile.count({ where: { id: id } })
.then(count => {
return (count > 0) ? true : false
});
}