我在 mongodb 中有一个集合,其中包含以下形式的文档:
{
"user": "user1",
"email: "[email protected] /cdn-cgi/l/email-protection",
}
其中“用户”和“电子邮件”字段是唯一的。我想将一个新用户插入到集合中,同时检查两个值的唯一性。我可以用 mgo 在 golang 中进行插入,如下所示:
session.SetSafe(&mgo.Safe{}) // ensure mgo waits for errors
user := struct{
string `bson:"user"`
string `bson:"email"`
}{
"user1",
"[email protected] /cdn-cgi/l/email-protection"
}
err := users.Insert(user) // where user is type *mgo.Collection
如果我打印err
它输出insertDocument :: caused by :: 11000 E11000 duplicate key error index: kails.users.$name_1 dup key: { : "user1" }
是否有一种惯用的方法来使用此错误来查找哪个值不唯一?(如果不是两个)? (或者还需要其他步骤吗?)。使用正则表达式解析字符串感觉......错误。
如果无法使用错误来查找是否唯一,是否有“$or”查询(检查唯一)+插入的替代方法?
我读过管理组织文档 http://godoc.org/labix.org/v2/mgo,希望我没有错过任何重要的事情。
http://godoc.org/labix.org/v2/mgo#IsDup http://godoc.org/labix.org/v2/mgo#IsDup
func IsDup(err error) bool
IsDup 返回 err 是否通知重复键错误,因为主键索引或辅助唯一索引已具有具有给定值的条目。
e.g.
err := users.Insert(user) // where user is type *mgo.Collection
if err != nil {
if mgo.IsDup(err) {
// Is a duplicate key, but we don't know which one
}
// Is another error
}
不幸的是,似乎没有一种方法可以辨别which如果您可能有多个唯一索引,则值不唯一。
您可以改为使用 User 结构ID
and Email
代替user
and email
, 尽管。 ID 将在 Mongo 插入时自动生成,并且电子邮件将具有唯一索引。如果您不需要任何进一步的唯一索引,您就可以安全地假设IsDup == true
大小写意味着仅存在重复的电子邮件地址。
电子邮件地址是很好的用户名,因为用户可以少记住一件事;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)