在mongodb中,它就像在schema / attribute / property / field上设置索引:{unique:true}一样简单。在bookshelf中,您可以使用knex指定唯一索引。但是,您如何检查是否存在唯一的密钥违规?例如,如果我设置用户名,电子邮件作为唯一键,并且有人使用相同的用户名和电子邮件创建新记录,则应该抛出错误。在Mongo中,这就像检查err.code 11000一样简单。
我可以查询数据库并检查是否存在记录,但我宁愿不必进行两次查询。 (检查预先存在的用户和插入)。
答案 0 :(得分:0)
例如,如果我设置用户名,电子邮件作为唯一键,并且有人使用相同的用户名和电子邮件创建新记录,则应该抛出错误。在Mongo中,这就像检查err.code 11000一样简单。
这与PostgreSQL的原理相同。您正在寻找SQLSTATE
23505
,即unique_violation
。
我发布了https://github.com/firebase/functions-samples/blob/master/fcm-notifications/functions/index.js,因为bookshelf.js的文档显然没有提到这一点。根据{{3}},您在错误字典中寻找sqlState
属性,假设节点的MySQL和PostgreSQL驱动程序的行为相同。
大概是err.sqlstate
?
看起来err.code
可能类似UNIQUE_VIOLATION
或ERRCODE_UNIQUE_VIOLATION
,但不确定。