3 回答

TA貢獻1830條經(jīng)驗 獲得超3個贊
我就是這樣做的。在服務(wù)啟動時執(zhí)行一次,然后將 MongoDatastore 對象傳遞給編排器、服務(wù)層和存儲庫層。我正在使用 mongo 的“github.com/mongodb/mongo-go-driver/mongo”驅(qū)動程序。我認為它在內(nèi)部監(jiān)視并回收空閑連接。因此,只要對 mongo.Client 對象的引用不丟失,我們就不必擔(dān)心連接中斷。
const CONNECTED = "Successfully connected to database: %v"
type MongoDatastore struct {
db *mongo.Database
Session *mongo.Client
logger *logrus.Logger
}
func NewDatastore(config config.GeneralConfig, logger *logrus.Logger) *MongoDatastore {
var mongoDataStore *MongoDatastore
db, session := connect(config, logger)
if db != nil && session != nil {
// log statements here as well
mongoDataStore = new(MongoDatastore)
mongoDataStore.db = db
mongoDataStore.logger = logger
mongoDataStore.Session = session
return mongoDataStore
}
logger.Fatalf("Failed to connect to database: %v", config.DatabaseName)
return nil
}
func connect(generalConfig config.GeneralConfig, logger *logrus.Logger) (a *mongo.Database, b *mongo.Client) {
var connectOnce sync.Once
var db *mongo.Database
var session *mongo.Client
connectOnce.Do(func() {
db, session = connectToMongo(generalConfig, logger)
})
return db, session
}
func connectToMongo(generalConfig config.GeneralConfig, logger *logrus.Logger) (a *mongo.Database, b *mongo.Client) {
var err error
session, err := mongo.NewClient(generalConfig.DatabaseHost)
if err != nil {
logger.Fatal(err)
}
session.Connect(context.TODO())
if err != nil {
logger.Fatal(err)
}
var DB = session.Database(generalConfig.DatabaseName)
logger.Info(CONNECTED, generalConfig.DatabaseName)
return DB, session
}
您現(xiàn)在可以按如下方式創(chuàng)建存儲庫:-
type TestRepository interface{
Find(ctx context.Context, filters interface{}) []Document, error
}
type testRepository struct {
store *datastore.MongoDatastore
}
func (r *testRepository) Find(ctx context.Context , filters interface{}) []Document, error{
cur, err := r.store.GetCollection("some_collection_name").Find(ctx, filters)
if err != nil {
return nil, err
}
defer cur.Close(ctx)
var result = make([]models.Document, 0)
for cur.Next(ctx) {
var currDoc models.Document
err := cur.Decode(&currDoc)
if err != nil {
//log here
continue
}
result = append(result, currDoc)
}
return result, err
}

TA貢獻1895條經(jīng)驗 獲得超7個贊
我這樣做解決了它
var CNX = Connection()
func Connection() *mongo.Client {
// Set client options
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// Connect to MongoDB
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
// Check the connection
err = client.Ping(context.TODO(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to MongoDB!")
return client
}
//calll connection
func main() {
collection := db.CNX.Database("tasks").Collection("task")
}
output "Connected to MongoDB!"

TA貢獻1875條經(jīng)驗 獲得超5個贊
我所做的是這樣的:
我有一個app.go文件來在我創(chuàng)建的config文件夾中建立mongoDB 連接
func Connection() *mongo.Client {
if err := godotenv.Load(); err != nil {
log.Println("No .env file found")
}
uri := os.Getenv("MONGODB_URI")
if uri == "" {
log.Fatal("You must set your 'MONGODB_URI' environmental variable. See\n\t https://www.mongodb.com/docs/drivers/go/current/usage-examples/#environment-variable")
}
// Set client options
clientOptions := options.Client().ApplyURI(uri)
// Connect to MongoDB
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
// Check the connection
err = client.Ping(context.TODO(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to MongoDB!")
return client
}
我在另一個名為employee.go的文件中調(diào)用了這個函數(shù),該文件位于模型文件夾中
var CNX = config.Connection()
func (e *Employee) CreateEmployeeDetails() *Employee {
coll := CNX.Database("employee").Collection("detail")
fmt.Println(coll)
result, err := coll.InsertOne(context.TODO(), e)
fmt.Printf("Inserted document with _id: %v\n", result.InsertedID)
if err != nil {
panic(err)
}
return e
}
- 3 回答
- 0 關(guān)注
- 188 瀏覽
添加回答
舉報