mongodb

package
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 13, 2026 License: MIT Imports: 23 Imported by: 0

Documentation

Overview

Package mongodb provides MongoDB database connectivity and repository operations.

Package mongodb provides MongoDB database connectivity and operations.

Package mongodb provides MongoDB database connectivity and operations.

Package mongodb provides MongoDB database connectivity and repository operations.

Package mongodb provides MongoDB database connectivity and repository operations.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotFound      = errors.New("document not found")
	ErrDuplicateKey  = errors.New("duplicate key error")
	ErrInvalidID     = errors.New("invalid document ID")
	ErrInvalidFilter = errors.New("invalid filter")
	ErrNoDocuments   = errors.New("no documents matched")
	ErrClientClosed  = errors.New("mongodb client is closed")
)

Common errors returned by repository operations.

Functions

func BuildPipelineFromDSL

func BuildPipelineFromDSL(filter map[string]interface{}, sort map[string]string, limit, skip *int64, project []string) []bson.M

BuildPipelineFromDSL creates an aggregation pipeline directly from a DSL filter map.

func ContainsRegex

func ContainsRegex(substring string) primitive.Regex

ContainsRegex creates a case-insensitive contains regex pattern.

func EndsWithRegex

func EndsWithRegex(suffix string) primitive.Regex

EndsWithRegex creates a case-insensitive ends-with regex pattern.

func EscapeRegexPattern

func EscapeRegexPattern(pattern string) string

EscapeRegexPattern escapes special regex characters in a pattern string.

func MustConnectionString

func MustConnectionString(ctx context.Context, container *mongodb.MongoDBContainer) string

MustConnectionString returns the connection string or panics. This is useful for integration tests that need the URI.

func ParseDSLFilter

func ParseDSLFilter(dslFilter map[string]interface{}) bson.M

ParseDSLFilter parses a DSL filter map into MongoDB filter.

func RunWithTestContainer

func RunWithTestContainer(t *testing.T, database string, fn func(t *testing.T, client *Client))

RunWithTestContainer is a helper for running tests with a MongoDB container.

func SetupTestContainerWithClient

func SetupTestContainerWithClient(t *testing.T, database string) (*TestContainer, *Client)

SetupTestContainerWithClient creates a MongoDB container and connects a client.

func StartsWithRegex

func StartsWithRegex(prefix string) primitive.Regex

StartsWithRegex creates a case-insensitive starts-with regex pattern.

func WildcardToRegex

func WildcardToRegex(pattern string) string

WildcardToRegex converts wildcard patterns (* and ?) to regex.

Types

type ArrayExpr

type ArrayExpr struct {
	Field string
	Type  string      // "elemMatch", "all", "size"
	Value interface{} // for size: int, for all: []interface{}, for elemMatch: bson.M
}

ArrayExpr represents an array query expression.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client wraps a MongoDB client with connection management and logging.

func New

func New(ctx context.Context, cfg Config, logger *slog.Logger) (*Client, error)

New creates a new MongoDB client with the given configuration.

func (*Client) Client

func (c *Client) Client() *mongo.Client

Client returns the underlying mongo.Client.

func (*Client) Close

func (c *Client) Close(ctx context.Context) error

Close gracefully disconnects from MongoDB.

func (*Client) Collection

func (c *Client) Collection(name string) *mongo.Collection

Collection returns a collection from the database.

func (*Client) Database

func (c *Client) Database() *mongo.Database

Database returns the MongoDB database handle.

func (*Client) GetPoolStats

func (c *Client) GetPoolStats(ctx context.Context) (PoolStats, error)

GetPoolStats returns the current connection pool statistics. Note: The mongo-driver doesn't expose detailed pool stats directly, so this returns information based on server status.

func (*Client) IsClosed

func (c *Client) IsClosed() bool

IsClosed returns true if the client has been closed.

func (*Client) WithTransaction

func (c *Client) WithTransaction(ctx context.Context, fn func(sessCtx mongo.SessionContext) error) error

WithTransaction executes a function within a MongoDB transaction.

type Config

type Config struct {
	// URI is the MongoDB connection string (e.g., mongodb://localhost:27017)
	URI string

	// Database is the name of the database to connect to
	Database string

	// MinPoolSize is the minimum number of connections in the pool
	MinPoolSize uint64

	// MaxPoolSize is the maximum number of connections in the pool
	MaxPoolSize uint64

	// ConnectTimeout is the timeout for establishing a connection
	ConnectTimeout time.Duration

	// SocketTimeout is the timeout for socket reads/writes
	SocketTimeout time.Duration

	// ServerSelectionTimeout is the timeout for server selection
	ServerSelectionTimeout time.Duration

	// RetryWrites enables retryable writes
	RetryWrites bool

	// RetryReads enables retryable reads
	RetryReads bool

	// MaxRetries is the maximum number of retry attempts for transient failures
	MaxRetries int

	// RetryBackoff is the base backoff duration between retries
	RetryBackoff time.Duration

	// MaxRetryBackoff is the maximum backoff duration between retries
	MaxRetryBackoff time.Duration
}

Config holds MongoDB connection configuration.

func DefaultConfig

func DefaultConfig() Config

DefaultConfig returns a Config with sensible defaults.

func (Config) Validate

func (c Config) Validate() error

Validate checks that the configuration is valid.

type ConfigAdapter

type ConfigAdapter struct {
	// contains filtered or unexported fields
}

ConfigAdapter adapts MongoDB Repository to a config repository interface.

func NewConfigAdapter

func NewConfigAdapter(client *Client, logger *slog.Logger) *ConfigAdapter

NewConfigAdapter creates a new ConfigAdapter.

func (*ConfigAdapter) Create

func (a *ConfigAdapter) Create(ctx context.Context, c *models.Config) error

Create inserts a new config.

func (*ConfigAdapter) Delete

func (a *ConfigAdapter) Delete(ctx context.Context, id string) error

Delete removes a config.

func (*ConfigAdapter) GetByID

func (a *ConfigAdapter) GetByID(ctx context.Context, id string) (*models.Config, error)

GetByID retrieves a config by its ID.

func (*ConfigAdapter) GetByName

func (a *ConfigAdapter) GetByName(ctx context.Context, name string) (*models.Config, error)

GetByName retrieves a config by its name.

func (*ConfigAdapter) List

func (a *ConfigAdapter) List(ctx context.Context, limit, offset int) ([]*models.Config, error)

List retrieves all configs with pagination.

func (*ConfigAdapter) Update

func (a *ConfigAdapter) Update(ctx context.Context, c *models.Config) error

Update updates an existing config.

type DSLQuery

type DSLQuery struct {
	Name       string
	Collection string
	Filter     map[string]interface{}
	Sort       map[string]string
	Limit      *int64
	Skip       *int64
	Select     []string
}

DSLQuery represents a parsed DSL query.

type DeploymentAdapter

type DeploymentAdapter struct {
	// contains filtered or unexported fields
}

DeploymentAdapter adapts MongoDB Repository to a deployment repository interface.

func NewDeploymentAdapter

func NewDeploymentAdapter(client *Client, logger *slog.Logger) *DeploymentAdapter

NewDeploymentAdapter creates a new DeploymentAdapter.

func (*DeploymentAdapter) Create

Create inserts a new deployment.

func (*DeploymentAdapter) Delete

func (a *DeploymentAdapter) Delete(ctx context.Context, id string) error

Delete removes a deployment.

func (*DeploymentAdapter) GetByID

func (a *DeploymentAdapter) GetByID(ctx context.Context, id string) (*models.Deployment, error)

GetByID retrieves a deployment by its ID.

func (*DeploymentAdapter) GetByName

func (a *DeploymentAdapter) GetByName(ctx context.Context, name string) (*models.Deployment, error)

GetByName retrieves a deployment by its name.

func (*DeploymentAdapter) List

func (a *DeploymentAdapter) List(ctx context.Context, limit, offset int) ([]*models.Deployment, error)

List retrieves all deployments with pagination.

func (*DeploymentAdapter) Update

Update updates an existing deployment.

type Document

type Document map[string]interface{}

Document represents a generic MongoDB document.

type ExecutionAdapter

type ExecutionAdapter struct {
	// contains filtered or unexported fields
}

ExecutionAdapter adapts MongoDB Repository to an execution repository interface.

func NewExecutionAdapter

func NewExecutionAdapter(client *Client, logger *slog.Logger) *ExecutionAdapter

NewExecutionAdapter creates a new ExecutionAdapter.

func (*ExecutionAdapter) Create

Create inserts a new execution.

func (*ExecutionAdapter) Delete

func (a *ExecutionAdapter) Delete(ctx context.Context, id string) error

Delete removes an execution.

func (*ExecutionAdapter) GetByID

func (a *ExecutionAdapter) GetByID(ctx context.Context, id string) (*models.Execution, error)

GetByID retrieves an execution by its ID.

func (*ExecutionAdapter) List

func (a *ExecutionAdapter) List(ctx context.Context, limit, offset int) ([]*models.Execution, error)

List retrieves all executions with pagination.

func (*ExecutionAdapter) ListByDeployment

func (a *ExecutionAdapter) ListByDeployment(ctx context.Context, deploymentID string, limit, offset int) ([]*models.Execution, error)

ListByDeployment retrieves executions for a specific deployment.

func (*ExecutionAdapter) Update

Update updates an existing execution.

type Filter

type Filter bson.M

Filter represents a MongoDB query filter.

type FilterExpr

type FilterExpr struct {
	Field    string
	Operator FilterOp
	Value    interface{}
	Options  string // for regex options like "i" (case-insensitive)
}

FilterExpr represents a single filter expression.

type FilterOp

type FilterOp string

FilterOp represents a MongoDB filter operator.

const (
	OpEq    FilterOp = "eq"
	OpNe    FilterOp = "ne"
	OpGt    FilterOp = "gt"
	OpGte   FilterOp = "gte"
	OpLt    FilterOp = "lt"
	OpLte   FilterOp = "lte"
	OpIn    FilterOp = "in"
	OpNin   FilterOp = "nin"
	OpRegex FilterOp = "regex"
)

Filter operators for MongoDB queries.

type FindOptions

type FindOptions struct {
	Sort       bson.D
	Limit      int64
	Skip       int64
	Projection bson.M
}

FindOptions contains options for find operations.

type HealthCheck

type HealthCheck struct {
	// contains filtered or unexported fields
}

HealthCheck provides health check functionality for MongoDB connections.

func NewHealthCheck

func NewHealthCheck(client *Client, logger *slog.Logger) *HealthCheck

NewHealthCheck creates a new health check for the given client.

func (*HealthCheck) Check

Check performs a health check on the MongoDB connection.

func (*HealthCheck) CheckReadiness

func (h *HealthCheck) CheckReadiness(ctx context.Context) error

CheckReadiness verifies the database is ready to accept operations.

func (*HealthCheck) IsHealthy

func (h *HealthCheck) IsHealthy(ctx context.Context) bool

IsHealthy returns true if the connection is healthy.

func (*HealthCheck) Ping

func (h *HealthCheck) Ping(ctx context.Context) error

Ping performs a simple ping to verify connectivity.

func (*HealthCheck) SetTimeout

func (h *HealthCheck) SetTimeout(timeout time.Duration)

SetTimeout sets the timeout for health check operations.

type HealthCheckResult

type HealthCheckResult struct {
	// Status is the overall health status
	Status HealthStatus

	// Message provides additional details about the health status
	Message string

	// Latency is the time taken to perform the health check
	Latency time.Duration

	// Details contains additional health check information
	Details map[string]interface{}

	// Timestamp is when the health check was performed
	Timestamp time.Time
}

HealthCheckResult contains the result of a health check.

type HealthStatus

type HealthStatus string

HealthStatus represents the health state of the MongoDB connection.

const (
	// HealthStatusHealthy indicates the connection is healthy.
	HealthStatusHealthy HealthStatus = "healthy"
	// HealthStatusUnhealthy indicates the connection is unhealthy.
	HealthStatusUnhealthy HealthStatus = "unhealthy"
	// HealthStatusDegraded indicates the connection is partially available.
	HealthStatusDegraded HealthStatus = "degraded"
)

type LogicalExpr

type LogicalExpr struct {
	Type    string // "and", "or", "not"
	Filters []FilterExpr
	Groups  []LogicalExpr
}

LogicalExpr represents a logical grouping of filters.

type PoolStats

type PoolStats struct {
	// TotalConnections is the total number of connections in the pool
	TotalConnections int
	// AvailableConnections is the number of available connections
	AvailableConnections int
	// InUseConnections is the number of connections currently in use
	InUseConnections int
}

PoolStats holds connection pool statistics.

type QueryBuilder

type QueryBuilder struct {
	// contains filtered or unexported fields
}

QueryBuilder provides a fluent API for building MongoDB aggregation pipelines.

func BuildFromDSL

func BuildFromDSL(dsl *DSLQuery) *QueryBuilder

BuildFromDSL creates a QueryBuilder from a DSL query definition.

func NewQueryBuilder

func NewQueryBuilder(collection string) *QueryBuilder

NewQueryBuilder creates a new QueryBuilder for the specified collection.

func (*QueryBuilder) All

func (qb *QueryBuilder) All(field string, values []interface{}) *QueryBuilder

All adds an $all query for arrays containing all specified elements.

func (*QueryBuilder) And

func (qb *QueryBuilder) And(filters ...FilterExpr) *QueryBuilder

And groups multiple filters with AND logic.

func (*QueryBuilder) AndGroup

func (qb *QueryBuilder) AndGroup(groups ...LogicalExpr) *QueryBuilder

AndGroup adds an AND group with nested logical expressions.

func (*QueryBuilder) BuildFilter

func (qb *QueryBuilder) BuildFilter() bson.M

BuildFilter builds the $match filter from all filter expressions.

func (*QueryBuilder) BuildPipeline

func (qb *QueryBuilder) BuildPipeline() []bson.M

BuildPipeline builds the complete aggregation pipeline.

func (*QueryBuilder) BuildSort

func (qb *QueryBuilder) BuildSort() bson.D

BuildSort builds the $sort stage document.

func (*QueryBuilder) ElemMatch

func (qb *QueryBuilder) ElemMatch(field string, conditions bson.M) *QueryBuilder

ElemMatch adds an $elemMatch query for array elements.

func (*QueryBuilder) Eq

func (qb *QueryBuilder) Eq(field string, value interface{}) *QueryBuilder

Eq adds an equality filter.

func (*QueryBuilder) Errors

func (qb *QueryBuilder) Errors() []error

Errors returns any errors encountered during query building.

func (*QueryBuilder) Exclude

func (qb *QueryBuilder) Exclude(fields ...string) *QueryBuilder

Exclude specifies which fields to exclude from results.

func (*QueryBuilder) Gt

func (qb *QueryBuilder) Gt(field string, value interface{}) *QueryBuilder

Gt adds a greater-than filter.

func (*QueryBuilder) Gte

func (qb *QueryBuilder) Gte(field string, value interface{}) *QueryBuilder

Gte adds a greater-than-or-equal filter.

func (*QueryBuilder) HasErrors

func (qb *QueryBuilder) HasErrors() bool

HasErrors returns true if there are any errors.

func (*QueryBuilder) In

func (qb *QueryBuilder) In(field string, values interface{}) *QueryBuilder

In adds an "in" filter for matching any value in a list.

func (*QueryBuilder) Limit

func (qb *QueryBuilder) Limit(n int64) *QueryBuilder

Limit sets the maximum number of documents to return.

func (*QueryBuilder) Lt

func (qb *QueryBuilder) Lt(field string, value interface{}) *QueryBuilder

Lt adds a less-than filter.

func (*QueryBuilder) Lte

func (qb *QueryBuilder) Lte(field string, value interface{}) *QueryBuilder

Lte adds a less-than-or-equal filter.

func (*QueryBuilder) Ne

func (qb *QueryBuilder) Ne(field string, value interface{}) *QueryBuilder

Ne adds a not-equal filter.

func (*QueryBuilder) Nin

func (qb *QueryBuilder) Nin(field string, values interface{}) *QueryBuilder

Nin adds a "not in" filter for excluding values in a list.

func (*QueryBuilder) Not

func (qb *QueryBuilder) Not(filter FilterExpr) *QueryBuilder

Not negates a filter.

func (*QueryBuilder) Or

func (qb *QueryBuilder) Or(filters ...FilterExpr) *QueryBuilder

Or groups multiple filters with OR logic.

func (*QueryBuilder) OrGroup

func (qb *QueryBuilder) OrGroup(groups ...LogicalExpr) *QueryBuilder

OrGroup adds an OR group with nested logical expressions.

func (*QueryBuilder) Project

func (qb *QueryBuilder) Project(projection bson.M) *QueryBuilder

Project sets a custom projection.

func (*QueryBuilder) Regex

func (qb *QueryBuilder) Regex(field string, pattern string, options string) *QueryBuilder

Regex adds a regex filter for pattern matching.

func (*QueryBuilder) RegexCaseInsensitive

func (qb *QueryBuilder) RegexCaseInsensitive(field string, pattern string) *QueryBuilder

RegexCaseInsensitive adds a case-insensitive regex filter.

func (*QueryBuilder) Select

func (qb *QueryBuilder) Select(fields ...string) *QueryBuilder

Select specifies which fields to include in results.

func (*QueryBuilder) Size

func (qb *QueryBuilder) Size(field string, size int) *QueryBuilder

Size adds a $size query for arrays of a specific length.

func (*QueryBuilder) Skip

func (qb *QueryBuilder) Skip(n int64) *QueryBuilder

Skip sets the number of documents to skip.

func (*QueryBuilder) Sort

func (qb *QueryBuilder) Sort(field string, direction SortDirection) *QueryBuilder

Sort adds a sort expression.

func (*QueryBuilder) SortAscending

func (qb *QueryBuilder) SortAscending(field string) *QueryBuilder

SortAscending adds an ascending sort.

func (*QueryBuilder) SortDescending

func (qb *QueryBuilder) SortDescending(field string) *QueryBuilder

SortDescending adds a descending sort.

func (*QueryBuilder) Where

func (qb *QueryBuilder) Where(field string, value interface{}) *QueryBuilder

Where adds an equality filter.

type Repository

type Repository struct {
	// contains filtered or unexported fields
}

Repository provides CRUD operations for MongoDB collections.

func NewRepository

func NewRepository(client *Client, collectionName string, logger *slog.Logger) *Repository

NewRepository creates a new repository for the specified collection.

func (*Repository) Collection

func (r *Repository) Collection() *mongo.Collection

Collection returns the underlying mongo.Collection.

func (*Repository) Count

func (r *Repository) Count(ctx context.Context, filter Filter) (int64, error)

Count returns the count of documents matching the filter.

func (*Repository) DeleteMany

func (r *Repository) DeleteMany(ctx context.Context, filter Filter) (int64, error)

DeleteMany deletes multiple documents matching the filter.

func (*Repository) DeleteOne

func (r *Repository) DeleteOne(ctx context.Context, filter Filter) (int64, error)

DeleteOne deletes a single document matching the filter.

func (*Repository) EnsureIndex

func (r *Repository) EnsureIndex(ctx context.Context, fields []string, unique bool) error

EnsureIndex creates a single index on the specified fields.

func (*Repository) EnsureIndexes

func (r *Repository) EnsureIndexes(ctx context.Context, indexes []*ast.MongoIndexDecl) error

EnsureIndexes creates indexes based on DSL MongoIndexDecl definitions.

func (*Repository) ExecuteQuery

func (r *Repository) ExecuteQuery(ctx context.Context, q *query.Query) ([]Document, error)

ExecuteQuery executes a query.Query and returns matching documents.

func (*Repository) Exists

func (r *Repository) Exists(ctx context.Context, filter Filter) (bool, error)

Exists checks if at least one document matches the filter.

func (*Repository) Find

func (r *Repository) Find(ctx context.Context, filter Filter, opts *FindOptions) ([]Document, error)

Find retrieves multiple documents matching the filter with options.

func (*Repository) FindByID

func (r *Repository) FindByID(ctx context.Context, id string) (Document, error)

FindByID retrieves a document by its ID.

func (*Repository) FindOne

func (r *Repository) FindOne(ctx context.Context, filter Filter) (Document, error)

FindOne retrieves a single document matching the filter.

func (*Repository) FindWithPagination

func (r *Repository) FindWithPagination(
	ctx context.Context,
	filter Filter,
	page pagination.PageRequest,
	sortField string,
	sortDir query.OrderDirection,
) (*pagination.PageResponse[Document], error)

FindWithPagination retrieves documents with pagination support.

func (*Repository) InsertMany

func (r *Repository) InsertMany(ctx context.Context, docs []Document) ([]string, error)

InsertMany inserts multiple documents into the collection.

func (*Repository) InsertOne

func (r *Repository) InsertOne(ctx context.Context, doc Document) (string, error)

InsertOne inserts a single document into the collection.

func (*Repository) UpdateMany

func (r *Repository) UpdateMany(ctx context.Context, filter Filter, update Update) (int64, error)

UpdateMany updates multiple documents matching the filter.

func (*Repository) UpdateOne

func (r *Repository) UpdateOne(ctx context.Context, filter Filter, update Update) (int64, error)

UpdateOne updates a single document matching the filter.

func (*Repository) WithTransaction

func (r *Repository) WithTransaction(ctx context.Context, fn func(sessCtx mongo.SessionContext) error) error

WithTransaction executes a function within a MongoDB transaction.

type SortDirection

type SortDirection int

SortDirection represents sort order.

const (
	// SortAsc represents ascending sort order.
	SortAsc SortDirection = 1
	// SortDesc represents descending sort order.
	SortDesc SortDirection = -1
)

type SortExpr

type SortExpr struct {
	Field     string
	Direction SortDirection
}

SortExpr represents a sort expression.

type TestContainer

type TestContainer struct {
	Container *mongodb.MongoDBContainer
	URI       string
	// contains filtered or unexported fields
}

TestContainer holds a MongoDB test container instance.

func SetupTestContainer

func SetupTestContainer(t *testing.T) *TestContainer

SetupTestContainer creates a MongoDB container for testing. It returns a TestContainer with the connection URI and a cleanup function.

func SetupTestContainerWithConfig

func SetupTestContainerWithConfig(t *testing.T, cfg TestContainerConfig) *TestContainer

SetupTestContainerWithConfig creates a MongoDB container with custom configuration.

func (*TestContainer) Cleanup

func (tc *TestContainer) Cleanup(t *testing.T)

Cleanup terminates the test container.

func (*TestContainer) NewTestClient

func (tc *TestContainer) NewTestClient(t *testing.T, database string) *Client

NewTestClient creates a new client connected to the test container.

type TestContainerConfig

type TestContainerConfig struct {
	// Image is the MongoDB image to use (default: mongo:7.0)
	Image string

	// Database is the database name to use
	Database string

	// ReplicaSet enables replica set mode (required for transactions)
	ReplicaSet bool
}

TestContainerConfig holds configuration for the test container.

func DefaultTestContainerConfig

func DefaultTestContainerConfig() TestContainerConfig

DefaultTestContainerConfig returns default test container configuration.

type Update

type Update bson.M

Update represents a MongoDB update document.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL