[英]Making a unique field in Mongo-go-driver
我對 Go 和 Mongodb 都很陌生,並且正在用 Go 和 Mongo 編寫我的第一個 rest-api。 我正在使用mongo-go-driver
並在 Go 中具有以下Modal
結構
type Modal struct {
Group []string `bson:"group" json:"group"`
Hostname string `bson:"hostname" json:"hostname"`
Overrides map[string]string `bson:"overrides" json:"overrides"`
Excludes []string `bson:"excludes" json:"excludes"`
}
我不想使用 mongo-db 提供的默認ObjectId
字段作為我的主鍵,而是希望將Hostname
字段作為主鍵。
如果我將Hostname
字段的類型設為 original.ObjectID ,則hostname
名將是唯一的,但其值將由primitive.ObjectID
隨機生成的字符串,而不是實際的主機名字符串值。
那么有沒有辦法我可以做到這一點。
您可以使用唯一索引來強制/只允許給定字段的不同值,例如:
db.collectionname.createIndex( { "hostname": 1 }, { unique: true } )
如果您想使用官方 MongoDB 驅動程序創建此類索引,您可以這樣做:
indexName, err := coll.Indexes().CreateOne(
context.Background(),
mongo.IndexModel{
Keys: bson.D{{Key: "hostname", Value: 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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.