【发布时间】:2020-07-19 13:51:56
【问题描述】:
基于documentation,go.mongodb.org/mongo-driver 在插入未提供 ID 的文档时似乎没有提供自动增加 ID 的方法。
type Document struct {
ID int `bson:"_id"`
Foo string `bson:"foo"`
}
document := &Document{Foo: "test"}
filter := bson.M{"_id": bson.M{"$eq": document.ID}}
update := bson.M{"$set": document}
res, err := mongoClient.Database(dbName).
Collection(collectionName).
UpdateOne(ctx, filter, update,
options.Update().SetUpsert(true))
在上面的代码示例中,ID 将默认为 int 的零值,即0,并将在 MongoDB 中持久化为{"_id":0,"foo":"test"}。
当没有使用mongo-driver 提供 ID 时,是否有一种自动递增 ID 的干净方法,而无需自己执行跟踪最后一个 ID 的逻辑?假设数据库中已经有 5 个文档,那么在没有提供 ID 的情况下运行上面的代码将持久化{"_id":6,"foo":"test"}。
【问题讨论】:
-
如果您不依赖于值本身的增量,请使用 UUID 来实现唯一性。它在 go 中很常见。
-
自动递增的 ID 实际上对于向后兼容非常重要,但如果不自己实现很多逻辑,就无法使用
go.mongodb.org/mongo-driver找到好的解决方案。 -
您是否有不想使用默认 ObjectID 的原因?
标签: mongodb go auto-increment mongo-go