我正在编写一个具有mongo数据库的Golang Web服务,我使用的是go.mongob.org/mongo-driverv1.11.6,一个简单的查询需要2秒钟以上的时间才能完成.数据库只有几条记录,只是为了测试,不超过10条记录.

我一直在寻找浪费时间的代码部分,我发现问题出在mongo包上.方法Find、FindOne,甚至Insert和Update都需要超过1到2秒的时间才能完成.

这是Mongo客户端实例化

func NewMongoDB() *MongoDB {
    uri := config.GetEnvConfig().MongoURI
    database := config.GetEnvConfig().MongoDatabase

    client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))

    if err != nil {
    panic(err)
    }

    return &MongoDB{
    client:   client,
    database: database,
    }
}

这是功能代码:

func getMessageByIdFromDB(id string) (*Message, error) {
    conn := database.NewMongoDB()
    defer conn.Disconnect()

    filter := map[string]string{
    "message_id": id,
    }

    var message Message

    start := time.Now()

    err := conn.GetCollection(collectionName).FindOne(context.TODO(), filter).Decode(&message)

    elapsed := time.Since(start)
    log.Printf("Querying messages took %s", elapsed)

    if err != nil {
    return nil, err
    }

    return &message, nil
}

这是函数时间跟踪的结果:

Querying messages took 2.320409472s

这与互联网连接无关,因为我用Python进行了查询测试,请求只用了0.003秒

我试图更改包的版本,但没有实现.我还试着重新安装项目的所有包,结果都是一样的.

我还try 在数据库中创建搜索索引,但没有不同的结果.查询也需要超过2秒才能完成.

我认为完成查询应该不会超过几毫秒.

推荐答案

mongo.Connect()"仅"通过启动后台监控程序来初始化Client.它可能不需要连接到(远程)数据库.

然后执行查询时,它们肯定需要建立连接,这可能需要几秒钟的时间.

您可以在强制连接到数据库之前使用Client.Ping()方法,并验证连接是否已成功创建,因此在此之后执行查询时,连接将准备就绪.

您还可以try 重复相同的查询,因为在第一个查询之后,连接不会关闭,而是放入一个连接池中,并在需要时再次使用(对于第二个查询).

Mongodb相关问答推荐

如何从文档列表的数组内部打印一个对象?

无法从我的NextJS 14应用程序中的Redux工具包2.0中提取数据

如何使用ID数组对一个集合中的金额求和并更新另一个集合中的字段?

MongoDB 聚合 - $project 和 $match 阶段未按预期工作

从 Amazon S3(Next.js、Mongodb、Mongoose)删除图像

分组前的 MongoDb 聚合总数

Mongodb 按数组元素聚合组

判断对象数组中的值是否存在golang

MongoDB 支持的最 Big Data 库数

MongoID find 或 find_by

我怎样才能排序空值在 mongodb 中是最后排序的?

你如何让 mongo 在远程服务器上运行?

Express 无法 PUT/DELETE 方法.出了什么问题?

MongoDB Compass 过滤器(查询)

在 MongoDB 中插入或更新许多文档

获取 mongodb 中所有唯一标签的列表

处理Mongodb连接的正确方法是什么?

MongoDB InsertMany 与 BulkWrite

全局初始化失败:BadValue Invalid or no user locale set.请确保正确设置 LANG 和/或 LC_* 环境变量

MongoMapper 和迁移