如何正确创建mongo模型和客户端?

如何正确创建mongo模型和客户端?

php小编苹果将为你介绍如何正确创建mongo模型和客户端。在使用MongoDB进行开发时,创建模型和客户端是非常重要的一步,它们决定了你在后续操作中的灵活性和效率。首先,你需要通过安装MongoDB扩展来启用MongoDB支持。然后,你可以使用MongoDB提供的API来创建模型和客户端。创建模型时,你需要定义集合名称、字段和索引等相关信息。创建客户端时,你需要指定MongoDB的连接信息,如主机名、端口号和认证信息等。通过正确创建模型和客户端,你将能够更好地操作MongoDB数据库,提高开发效率和代码质量。

问题内容

我有一个模型想要插入并从 mongodb 读取:

type TripFeedback struct {    ID        primitive.ObjectID `json:"_id" bson:"_id"`    UserID    string             `json:"user_id" bson:"user_id"`    WaybillID uint64             `json:"waybill_id" bson:"waybill_id"`    Rating    Rating             `json:"rating" bson:"rating"`    Comment   string             `json:"comment" bson:"comment"`    CreatedAt time.Time          `json:"created_at" bson:"created_at"`}

登录后复制

我希望 ID 字段在 mongo 内部自动递增,所以我将 ID 字段保留为空:

feedback := model.NewTripFeedback(        createRequest.UserID,        createRequest.WaybillID,        rating,        createRequest.Comment,        createRequest.ReceivedAt,    )    _, err = r.collection.Create(ctx, feedback)

登录后复制

此外,在创建存储库时,我这样做:

// NewFeedbackRepository connects to mongo db and feedback collection.func NewFeedbackRepository(ctx context.Context, client *mongo.Client) (*FeedbacksRepository, error) {    r := FeedbacksRepository{        c:       client.Database(dbName).Collection(feedbackCollectionName),        metrics: NewMetrics(),    }    if err := r.migrate(ctx); err != nil {        return nil, err    }    return &r, nil}// migrate ensures presence of dossier collection in database.func (r *FeedbacksRepository) migrate(ctx context.Context) error {    mdb := r.c.Database()    cs, lcErr := mdb.ListCollectionNames(ctx, bson.M{"name": feedbackCollectionName})    if lcErr != nil {        return fmt.Errorf("migrate: list collections error: %w", lcErr)    }    if len(cs) == 0 {        if err := mdb.CreateCollection(ctx, feedbackCollectionName); err != nil {            return fmt.Errorf("migrate: create collection error: %w", err)        }    }    return nil}

登录后复制

你能告诉我我做错了什么吗?我还没有真正理解如何正确使用 mongo db 中的 _id 字段。我希望它在 mongo 内部创建和处理

write errors: [E11000 duplicate key error collection: drive.feedback index: _id_ dup key: { _id: ObjectId('000000000000000000000000') }]"

登录后复制

解决方法

如果未传入,MongoDB 将生成 ID。在您的结构中,您传入的 ID 全部为零。

您可以做两件事:

您可以自己生成它:

feedback := model.NewTripFeedback(        ID: primitive.NewObjectID(),        createRequest.UserID,

登录后复制

或者,您没有将其传入:

type TripFeedback struct {    ID        *primitive.ObjectID `json:"_id" bson:"_id,omitempty"`    UserID    string             `json:"user_id" bson:"user_id"`    ...

登录后复制

然后,如果不初始化ID,则会生成ID。

以上就是如何正确创建mongo模型和客户端?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2484821.html

(0)
上一篇 2025年3月4日 21:38:22
下一篇 2025年2月23日 13:55:53

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用 Gin 在 HTTP 服务器中即时生成 zip / 7z 存档?

    php小编苹果为你带来了使用Gin在HTTP服务器中即时生成zip/7z存档的简洁指南。Gin是一个轻量级的Go语言框架,具有高性能和易用性。本文将介绍如何使用Gin处理HTTP请求,并通过调用系统命令和第三方库来生成zip和7z存档文件。…

    2025年3月4日
    200
  • 拆分来自 HTML 文本区域的字符串会导致 GOLANG 中出现意外结果

    拆分来自 HTML 文本区域的字符串会导致 Golang 中出现意外结果。这是由于在拆分过程中,可能会出现特殊字符或标签未被正确处理的情况,导致字符串分割错误,进而影响后续的数据处理和展示。为了避免这种情况的发生,开发人员需要仔细处理和转义…

    2025年3月4日
    200
  • 使用反射将字节复制到结构体字段中

    php小编草莓介绍:在编程中,有时候我们需要将字节数据复制到结构体的字段中。这个过程可以通过使用反射来实现。反射是一种强大的工具,可以在运行时检查和操作代码结构。通过反射,我们可以获取结构体的字段信息,并将字节数据按照字段的类型和顺序复制到…

    2025年3月4日
    200
  • Gorm 应用程序无法连接到 Mac 上 docker 容器中的 PostgreSQL,忽略 DSN

    php小编小新最近遇到了一个问题,就是在Mac上使用Gorm应用程序连接docker容器中的PostgreSQL时出现了连接问题。具体表现为忽略了DSN。DSN是数据源名称的缩写,用于指定数据库连接的信息。这个问题让我烦恼不已,因为无法连接…

    2025年3月4日
    200
  • Ent 查询中的嵌套聚合

    php小编苹果在本文中将为大家介绍“Ent 查询中的嵌套聚合”。在数据查询和分析中,嵌套聚合是一种强大的技术,可以在一个查询中进行多个层级的聚合操作。通过使用嵌套聚合,我们可以更加灵活地对数据进行深入分析,从而得到更精准的结果。本文将详细解…

    2025年3月4日
    200
  • 在 Golang 中保存到 MongoDB 时如何解决空数据值问题?

    在Golang中,保存数据到MongoDB时,经常会遇到空数据值的问题。当某个字段的值为空时,MongoDB默认会将其存储为null。然而,在实际应用中,我们可能更希望将其存储为一个特定的默认值,以便更好地处理和查询数据。那么,在Golan…

    2025年3月4日
    200
  • 使用go的socks5代理

    php小编柚子今天要为大家介绍的是使用Go语言实现的socks5代理。在网络访问过程中,我们经常遇到需要隐藏真实IP地址或绕过网络封锁的情况。而使用socks5代理可以帮助我们轻松实现这些目标。Go语言作为一门高效、简洁的编程语言,具有丰富…

    2025年3月4日
    200
  • 容器运行完后退出

    在Web开发中,容器是一种常见的技术,如Docker、Kubernetes等。它们能够提供环境隔离和资源管理的功能,使应用程序能够在不同的环境中运行。然而,有时候我们希望容器运行完毕后能够自动退出,而不是一直保持运行状态。那么,如何实现容器…

    2025年3月4日
    200
  • 如何通过网页抓取访问动态 HTML 元素?

    php小编小新在这里为大家介绍一种方法,可以通过网页抓取访问动态HTML元素。当我们在进行网页抓取时,有时会遇到一些动态生成的内容,这些内容在网页加载完成之前无法直接获取。幸运的是,我们可以利用一些工具和技术来解决这个问题。本文将介绍一种基…

    2025年3月4日
    200
  • 用于测试的 golang 接口

    php小编草莓为您介绍一款用于测试的golang接口。在软件开发过程中,测试是不可或缺的环节,而这款接口则提供了便捷的测试功能。通过该接口,开发人员可以快速检验代码的正确性和稳定性,提高开发效率。无论是接口的功能测试、性能测试还是压力测试,…

    2025年3月4日
    200

发表回复

登录后才能评论