У меня проблемы с созданием уникальных индексов для некоторых моих данных с использованием официального драйвера MongoDB для Go.
Итак, у меня есть такая структура:
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
в качестве параметра в контексте перед созданием товар. Кроме того, я не уверен, что с тем, что я делаю, я создаю индекс только один раз (что я хочу сделать) . Я был бы признателен, если бы мне указали в правильном направлении, как это сделать.
Я использую инфраструктуру echo для Go, на всякий случай, если это предоставляет больше контекста.