MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

Go . में MongoDB कनेक्शन का पुन:उपयोग कैसे करें

मैं इसे इस तरह से करता हूं। सेवा शुरू होने पर इसे एक बार करें और फिर MongoDatastore ऑब्जेक्ट को ऑर्केस्ट्रेटर, सर्विस लेयर्स और रिपॉजिटरी लेयर्स पर पास करें। मैं मोंगो के लिए "github.com/mongodb/mongo-go-driver/mongo" ड्राइवर का उपयोग कर रहा हूं। मुझे लगता है कि यह आंतरिक रूप से निष्क्रिय कनेक्शनों की निगरानी और पुनर्चक्रण करता है। इसलिए, जब तक mongo.Client ऑब्जेक्ट खोया नहीं जाता है, तब तक हमें टूटे हुए कनेक्शनों के बारे में परेशान होने की आवश्यकता नहीं है।


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
}

अब आप नीचे के रूप में अपना भंडार बना सकते हैं:-

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
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या मोंगोडब एग्रीगेशन फ्रेमवर्क मैप/कम करने से तेज है?

  2. नेवला में निर्मित संपत्ति को अद्यतन करने में असमर्थ?

  3. स्प्रिंग MongoDB प्रक्रिया/धागा लीक

  4. Django mongoengine दस्तावेज़ में कई क्षेत्र

  5. मोंगोडीबी $पुलऑल