Вы можете использовать уникальный индекс для принудительного применения / разрешения только определенных значений данного поля, например ::
db.collectionname.createIndex( { "hostname": 1 }, { unique: true } )
Если вы хотите создать такой индекс, используя официальный драйвер MongoDB, вот как вы можете это сделать:
indexName, err := coll.Indexes().CreateOne(
context.Background(),
IndexModel{
Keys : bsonx.Doc{{"hostname", bsonx.Int32(1)}},
Options: options.Index().SetUnique(true),
},
)
Но знайте, что в MongoDB каждый документ должен иметь свойство _id
, поэтому, как указано выше, документы будут иметь автоматически сгенерированное поле _id
(типа ObjectId
). Если вас это не беспокоит, все готово.
Также обратите внимание, что вы можете сопоставить Modal.Hostname
с полем _id
с тегами структуры:
type Modal struct {
Group []string `bson:"group" json:"group"`
Hostname string `bson:"_id" json:"hostname"`
Overrides map[string]string `bson:"overrides" json:"overrides"`
Excludes []string `bson:"excludes" json:"excludes"`
}
И снова все готово. Недостатком этого решения является то, что документы в MongoDB не будут иметь свойства с именем hostname
, поскольку оно будет храниться в _id
.