如何解决在MongoDB golang驱动程序中使用UUID代替ObjectID
我想使用UUID作为我的_id属性:
func (mongoDB *MongoDB) CreateBook(ctx context.Context,book *ds.Book) (err error) {
book.ID = uuid.New().String()
collection := mongoDB.Database.Collection(BookCollection)
insertResult,err := collection.InsertOne(context.TODO(),book)
if err != nil {
return
}
uuid := insertResult.InsertedID.(string)
task.ID = uuid
return
}
我想知道是否需要检查生成的UUID是否唯一?像下面的代码:
func (mongoDB *MongoDB) CreateBook(ctx context.Context,book *ds.Book) (error) {
for ;; {
book.ID = uuid.New().String()
collection := mongoDB.Database.Collection(BookCollection)
insertResult,book)
if err == nil {
uuid := insertResult.InsertedID.(string)
book.ID = uuid
return err
}
}
}
此代码的问题是我不知道如何确保返回的错误是重复的主键错误,因为返回的错误是通用错误对象。所以问题是,有必要检查生成的UUID是否唯一,如果有必要,如何确保InsertOne返回的错误是重复的PK错误?
解决方法
服务器将强制_id值在集合中的唯一性。如果您尝试插入两个具有相同_id的文档,则第二次插入将失败。因此,您当然应该尽力生成唯一的_id值,但是不必保证唯一性,因为服务器会这样做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。