【发布时间】:2018-04-14 17:31:29
【问题描述】:
我想在注册时将数据插入用户集合。
因此,电子邮件和用户名是唯一的,不能重复。我使用 mgo.v2 作为 mongodb 驱动程序和 mgo.Index 来定义唯一键。
这是我所做的:
type User struct {
ID bson.ObjectId `bson:"_id,omitempty" json:"_id,omitempty"`
Username string `bson:"username" json:"username"`
PW string `bson:"pw" json:"pw"`
Email string `bson:"email" json:"email"`
}
func (u *User) Add() error {
mConn := mongodb.Conn()
defer mConn.Close()
index := mgo.Index{
Key: []string{"username", "email"},
Unique: true,
}
c := mConn.DB(DB).C(Collection)
err := c.EnsureIndex(index)
if err != nil {
return err
}
u.CreatedAt = time.Now()
err = c.Insert(u)
return err
}
问题是我希望用户名和电子邮件完全独一无二。这意味着,如果 username 和 email 已经插入到集合中,它们将无法再次插入。
但现在,它只检查电子邮件和用户名,以确定它们是否都存在于同一个文档中。这意味着如果有人提交相同的电子邮件但不同的用户名,它仍然会通过插入过程。
例如: 如果我们的收藏中已经有这个
{"username" : "user1", "email" : "aaa@xxx.com"}
如果其他用户提交:
{"username" : "user1", "email" : "aaa2@xxx.com"} //different email
这将成功插入。这不是我想要的。
或者,如果用户提交:
{"username" : "user2", "email" : "aaa@xxx.com"} //different username
这仍然会成功插入,这也不是我想要的。
知道如何实现吗?
【问题讨论】: