| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package database
- import (
- "context"
- "fmt"
- zapLogger "fwh-toolbox-server/logger"
- "time"
- "go.mongodb.org/mongo-driver/mongo"
- "go.mongodb.org/mongo-driver/mongo/options"
- "go.mongodb.org/mongo-driver/x/mongo/driver/connstring"
- )
- var MongoClient *mongo.Client
- var MongoDb *mongo.Database
- func InitMongo(uri string) (*mongo.Client, error) {
- databaseName, err := parseMongoDatabaseName(uri)
- if err != nil {
- return nil, err
- }
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
- if err != nil {
- zapLogger.Sugar.Errorln("Mongo connect error: ", err)
- return nil, err
- }
- if err := client.Ping(ctx, nil); err != nil {
- zapLogger.Sugar.Errorln("Mongo ping error: ", err)
- return nil, err
- }
- MongoClient = client
- MongoDb = client.Database(databaseName)
- zapLogger.Sugar.Infoln("MongoDB connected, database: ", databaseName)
- return client, nil
- }
- func parseMongoDatabaseName(uri string) (string, error) {
- cs, err := connstring.ParseAndValidate(uri)
- if err != nil {
- return "", fmt.Errorf("parse MongoDB URI: %w", err)
- }
- if cs.Database == "" {
- return "", fmt.Errorf("MongoDB URI must contain a database name")
- }
- return cs.Database, nil
- }
- func GetCollection(collName string) *mongo.Collection {
- return MongoDb.Collection(collName)
- }
|