mongo
conf:
message Data {
message Mongo {
string url = 1;
}
Mongo mongo = 3;
}
yaml:
data:
mongo:
url: "mongodb://localhost:27017"
data
package data
import (
"backend/application/product/internal/conf"
"backend/application/product/internal/data/models"
"context"
"fmt"
"github.com/exaring/otelpgx"
"github.com/go-kratos/kratos/v2/log"
"github.com/google/wire"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
"github.com/redis/go-redis/v9"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
"time"
)
// ProviderSet is data providers.
var ProviderSet = wire.NewSet(NewData, NewMongo)
type Data struct {
mdb *mongo.Database
logger *log.Helper
}
// NewData .
func NewData(
mdb *mongo.Database,
logger log.Logger,
) (*Data, func(), error) {
cleanup := func() {
log.NewHelper(logger).Info("closing the data resources")
}
return &Data{
logger: log.NewHelper(logger), // 注入日志
mdb: mdb,
}, cleanup, nil
}
// NewMongo 文档数据库
func NewMongo(conf *conf.Data, logger log.Logger) *mongo.Database {
helper := log.NewHelper(log.With(logger, "module", "user/data/mongo"))
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.Connect(ctx, options.Client().ApplyURI(conf.Mongo.Url))
if err != nil {
helper.Fatalf("failed opening connection to mongo: %v", err)
}
err = client.Ping(ctx, readpref.Primary())
if err != nil {
helper.Fatal(err)
}
return client.Database(conf.Mongo.Database, nil)
}