package main import ( "context" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) type mongoClient struct { dbName, colName string client *mongo.Client col *mongo.Collection } func (mc *mongoClient) init(dbName, colName string) error { var err error if err = mc.Connect(dbName, colName); err != nil { return err } if err = mc.Drop(); err != nil { return err } return nil } func (mc *mongoClient) Connect(dbName, colName string) error { var err error mc.client, err = mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017")) if err != nil { return err } ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) err = mc.client.Connect(ctx) if err != nil { return err } mc.col = mc.client.Database(dbName).Collection(colName) mc.dbName = dbName mc.colName = colName return nil } func (mc *mongoClient) InsertOne(document interface{}) error { _, err := mc.col.InsertOne(context.Background(), document) return err } func (mc *mongoClient) UpdateOne(filter, update interface{}) error { _, err := mc.col.UpdateOne(context.Background(), filter, update) return err } func (mc *mongoClient) UpdateMany(filter, update interface{}) error { _, err := mc.col.UpdateMany(context.Background(), filter, update) return err } func (mc *mongoClient) Finddoc(filter bson.M) ([]bson.M, error) { cur, err := mc.col.Find(context.Background(), filter) if err != nil { return nil, err } var results []bson.M err = cur.All(context.Background(), &results) return results, err } func (mc *mongoClient) FindOneAndDelete(filter bson.M) (bson.M, error) { res := mc.col.FindOneAndDelete(context.Background(), filter) var result bson.M err := res.Decode(&result) return result, err } func (mc *mongoClient) Drop() error { return mc.col.Drop(context.Background()) } func (mc *mongoClient) Disconnect() error { err := mc.client.Disconnect(context.Background()) if err != nil { return err } mc.col = nil mc.client = nil mc.dbName = "" mc.colName = "" return nil }