在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, err := collection.InsertOne(context.TODO(), book)
if err == nil {
uuid := insertResult.InsertedID.(string)
book.ID = uuid
return err
}
}
}

这个代码的问题是,我不知道如何确保返回的错误是重复的主键错误,因为返回的错误为一般错误对象。所以问题是,有必要检查生成的UUID是否是唯一的,如果有必要,我如何确保InsertOne返回的错误是重复的PK错误?

服务器将强制集合中_id值的唯一性。如果您尝试插入两个id相同的文档,第二次插入将失败。因此,您当然应该尽您所能生成唯一_id值,但您不必保证的唯一性,因为服务器会这样做。

最新更新