簡體   English   中英

在 Mongo-go-driver 中創建一個獨特的字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM