我需要使用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)){...}
7条答案
按热度按时间llew8vvj1#
我不喜欢用count来检查记录是否存在,假设你有上亿条相似的记录,如果你只想得到布尔值,如果存在,那为什么要把它们都计数呢?
findOne将在存在匹配时在第一个值处完成工作。
bvjxkvbb2#
**更新:**看answer which suggests using
findOne()
below,我个人更喜欢;然而,该答案描述了一种替代方法。您 * 没有从
isIdUnique
函数返回 *:ljo96ir53#
你可以数数。
文档链接,v5 Beta版本
fzsnzjdm4#
我发现the answer by @alecxe在某些情况下是不可靠的,所以我调整了逻辑:
nwnhqdif5#
因为Sequelize是围绕承诺设计的,所以alecxe's answer可能是最有意义的,但是为了提供一个替代方案,您也可以传入一个回调:
aij0ehis6#
扩展@Jalal的答案,如果您非常关注性能影响,同时维护一个简单的Sequelize结构,并且您不需要行数据,我建议您只从数据库请求一列,为什么要浪费带宽和时间要求数据库返回所有列呢?
attributes
字段告诉Sequelize只从数据库请求id
列,而不发送整行的内容。同样,这可能看起来有点过分,但在大规模情况下,如果您有许多列来保存大量数据,这可能会在性能上产生巨大的差异。
7uhlpewt7#
试试下面的解决方案。我试过了,效果很好。