Я бы хотел подключить свой сервер, написанный на Go, к MongoDB, но я не уверен, как это сделать эффективно. Несколько примеров, которые я нашел, реализовали это, как показано ниже.
libs / mongodb / client.go
package mongodb
import (
"context"
"log"
"project/keys"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func GetClient() *mongo.Database {
client, err := mongo.Connect(
context.Background(),
options.Client().ApplyURI(keys.GetKeys().MONGO_URI),
)
if err != nil {
log.Fatal(err)
}
return client.Database(keys.GetKeys().MONGO_DB_NAME)
}
services / user / findOne.go
package userservices
import (
"context"
"log"
"project/libs/mongodb"
"project/models"
"go.mongodb.org/mongo-driver/bson"
)
func FindOne(filter bson.M) (models.User, error) {
var user models.User
collection := mongodb.GetClient().Collection("users")
result := collection.FindOne(context.TODO(), filter)
if result.Err() != nil {
return user, result.Err()
}
if err := result.Decode(&user); err != nil {
log.Println("Failed to decode user with error:", err)
return user, err
}
return user, nil
}
Функция GetClient
возвращает экземпляр базы данных, который затем используется в приложении. Кажется, это работает, но мне интересно, действительно ли это наилучшая практика, поскольку создается впечатление, что создается новое соединение каждый раз, когда запрашивается новый клиент, как показано во втором фрагменте кода, или это предположение неверно? Я также подумал о преобразовании GetClient
в одноэлементный файл, который всегда возвращает один и тот же экземпляр базы данных, но как в этом случае будет обрабатываться потерянное соединение? Спасибо