登录
首页 >  Golang >  Go问答

使用 UUID 替代 ObjectID 在 MongoDB 的 golang 驱动中

来源:stackoverflow

时间:2024-03-08 13:42:21 462浏览 收藏

今天golang学习网给大家带来了《使用 UUID 替代 ObjectID 在 MongoDB 的 golang 驱动中》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我想使用 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返回的错误是duplicate pk error?


解决方案


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

今天关于《使用 UUID 替代 ObjectID 在 MongoDB 的 golang 驱动中》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>