Skip to content

MongoDB

core.IMongoDB — MongoDB abstraction (mongo-driver). ctx.DBMongo() returns a handle bound to the request context; methods take no ctx.

Connect & wire

go
mongo, err := core.NewMongoDB(env)   // DB_MONGO_* / DB_MONGO_CONNECTION_STRING
app, _ := core.NewApp(env, core.WithMongo("default", mongo))
DB_MONGO_CONNECTION_STRING=mongodb://user:pass@host:27017/mydb
# or
DB_MONGO_HOST=... DB_MONGO_PORT=... DB_MONGO_USERNAME=... DB_MONGO_PASSWORD=... DB_MONGO_NAME=...

Operations

Filters/updates use bson.M (or any BSON-serialisable value):

go
import "go.mongodb.org/mongo-driver/bson"

m := ctx.DBMongo()

var user User
err := m.FindOne(&user, "users", bson.M{"email": "[email protected]"})
// missing document → IError with code NOT_FOUND

var users []User
err = m.Find(&users, "users", bson.M{"status": "active"})

id, err := m.InsertOne("users", User{Name: "alice"})
err = m.UpdateOne("users", bson.M{"_id": id}, bson.M{"$set": bson.M{"name": "bob"}})
err = m.DeleteOne("users", bson.M{"_id": id})

n, err := m.Count("users", bson.M{"status": "active"})

Interface

go
type IMongoDB interface {
    FindOne(dest any, collection string, filter any) IError
    Find(dest any, collection string, filter any) IError
    InsertOne(collection string, document any) (string, IError)
    UpdateOne(collection string, filter any, update any) IError
    DeleteOne(collection string, filter any) IError
    Count(collection string, filter any) (int64, IError)
    WithContext(ctx context.Context) IMongoDB
    Close() IError
}

Named connections: ctx.DBSMongo("audit").

Maintained by Passakon Puttasuwan & Dev Core Team.