gpt4 book ai didi

mongodb - 在 Mongo-go-driver 中创建一个独特的字段

转载 作者:IT王子 更新时间:2023-10-29 01:40:30 28 4
gpt4 key购买 nike

我对 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 字段的类型设为 primitive.ObjectID,那么 hostname 将是唯一的,但其值将随机生成mongodb 的字符串,而不是实际的主机名字符串值。

那么有什么办法可以做到这一点。

最佳答案

您可以使用 unique index强制/只允许给定字段的不同值,例如:

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 中。

关于mongodb - 在 Mongo-go-driver 中创建一个独特的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55921098/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com