我在使用Go 的官方 MongoDB 驱动程序为我的一些数据创建唯一索引时遇到了一些问题。
所以我有一个这样的结构:
type Product struct {
ID primitive.ObjectID `json:"_id" bson:"_id"`
Name string `json:"name" bson:"name"`
Price float64 `json:"price" bson:"price"`
Attribute []Attribute `json:"attribute" bson:"attribute"`
Category string `json:"category" bson:"category"`
}
然后我想为该name
属性创建一个唯一索引。我试图在我的功能中做这样的事情Create
(对于产品)
func Create(c echo.Context) error {
//unique index here
indexModel, err := productCollection.Indexes().CreateOne(context.Background(),
IndexModel{
Keys: bsonx.Doc{{"name", bsonx.Int32(1)}},
Options: options.Index().SetUnique(true),
})
if err != nil {
log.Fatalf("something went wrong: %+v", err)
}
//create the product here
p := new(Product)
if err := c.Bind(p); err != nil {
log.Fatalf("Could not bind request to struct: %+v", err)
return util.SendError(c, "500", "something went wrong", "failed")
}
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
result, _ := productCollection.InsertOne(ctx, p)
return util.SendSuccess(c, result.InsertedID)
}
问题是在创建产品之前,我并不完全知道如何indexModel
在上下文中作为选项传递。另外,我不确定我正在做什么,我只创建一次索引(这是我想要做的)。如果我能指出如何做到这一点的正确方向,我将不胜感激。
我正在使用 Go 的 echo 框架,以防万一这提供了更多上下文。