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").