mongodb客户端驱动并发安全吗?

ove*_*nge 1 database go mongodb goroutine mongo-go

在以下代码库中的代码中,创建了 mongodb 客户端(如下所示):

import (
    "context"
    "time"

    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
)

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
Run Code Online (Sandbox Code Playgroud)

在我们的场景中:

Goroutine 1 用于collection1读写操作:

  collection1 := client.Database("testing").Collection("collectionone")
Run Code Online (Sandbox Code Playgroud)

Go-routine 2 同时使用collection1&collection2进行读写操作:

 collection2 := client.Database("testing").Collection("collectiontwo")
Run Code Online (Sandbox Code Playgroud)

client在多个 go 例程中使用并发安全吗?

icz*_*cza 6

的文档mongo.Database明确指出:

Database 是 MongoDB 数据库的句柄。多个 goroutine 并发使用是安全的。

然后mongo.Client

Client 是一个句柄,代表 MongoDB 部署的连接池。多个 goroutine 并发使用是安全的。

mongo.Collection

Collection 是 MongoDB 集合的句柄。多个 goroutine 并发使用是安全的。

相关参见:goroutine创建多个mongodb连接