我正在为我的asp.net应用程序开发MongoDB支持的身份验证模块.MongoDB数据库有一组用户,我存储登录信息 - 用户名,电子邮件和密码.用户名和电子邮件都设置为唯一:
users.ensureIndex({email:1}, {unique:1}) users.ensureIndex({uname:1}, {unique:1})
现在,如果我尝试使用现有的uname或email插入记录,我会收到MongoDB异常:
Safemode detected an error: E11000 duplicate key error index: authdb.users.$email_1 dup key: { : "test@test.com" } (response: { "err" : "E11000 duplicate key error index: authdb.users.$email_1 dup key: { : \"test@test.com\" }", "code" : 11000, "n" : 0, "connectionId" : 9, "ok" : 1.0 })
我需要告诉用户他们输入的用户名或电子邮件已经存在,但整个例外只是一小段文字,看看发生了什么我必须通过查看"$ email"或"$ uname"来猜测在错误消息文本中.MongoDB异常是否有某种解析器可以帮助我检测异常是什么?
我在MongoDB的bug跟踪器中创建了一个功能请求,以便在重复键错误时为getLastError的输出添加额外的字段.请在https://jira.mongodb.org/browse/SERVER-3069投票.
在实现之前,对于您的用例,您只需检查错误字符串是否包含"email"或"uname",并从您尝试插入的文档中检索重复值.它并不像它可能那么优雅,但它现在应该有用.