mongodb

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Apr 10, 2026 License: MIT Imports: 19 Imported by: 0

README

MongoDB

概念对比

MongoDB存储结构 RDBMS存储结构
database database
collection table
document row
field column
index 索引
primary key primary key

Docker部署

下载镜像:

docker pull bitnami/mongodb:latest
docker pull bitnami/mongodb-exporter:latest

带密码安装:

docker run -itd \
    --name mongodb-server \
    -p 27017:27017 \
    -e MONGODB_ROOT_USER=root \
    -e MONGODB_ROOT_PASSWORD=123456 \
    -e MONGODB_USERNAME=test \
    -e MONGODB_PASSWORD=123456 \
    -e MONGODB_DATABASE=finances \
    bitnami/mongodb:latest

不带密码安装:

docker run -itd \
    --name mongodb-server \
    -p 27017:27017 \
    -e ALLOW_EMPTY_PASSWORD=yes \
    bitnami/mongodb:latest

有两点需要注意:

  1. 如果需要映射数据卷,需要把本地路径的所有权改到1001:sudo chown -R 1001:1001 data/db,否则会报错: ‘mkdir: cannot create directory ‘/bitnami/mongodb’: Permission denied’
  2. 从MongoDB 5.0开始,有些机器运行会报错:Illegal instruction,这是因为机器硬件不支持 AVX 指令集 的缘故,没办法,MongoDB降级吧。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

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

func NewClient

func NewClient(opts ...Option) (*Client, error)

func (*Client) CheckConnect

func (c *Client) CheckConnect() bool

CheckConnect 检查MongoDB连接状态

func (*Client) Close

func (c *Client) Close()

Close 关闭MongoDB客户端

func (*Client) Count

func (c *Client) Count(ctx context.Context, collection string, filter interface{}) (int64, error)

Count 统计集合中文档数量,使用 Client 配置的超时和日志方式

func (*Client) DeleteMany

func (c *Client) DeleteMany(ctx context.Context, collection string, filter interface{}) (*mongoV2.DeleteResult, error)

DeleteMany 删除多个文档

func (*Client) DeleteOne

func (c *Client) DeleteOne(ctx context.Context, collection string, filter interface{}) (*mongoV2.DeleteResult, error)

DeleteOne 删除单个文档

func (*Client) Exist

func (c *Client) Exist(ctx context.Context, collection string, filter interface{}) (bool, error)

Exist 检查集合中是否存在满足 filter 的文档,返回布尔值和可能的错误。 使用 Client 的超时配置,客户端未初始化时返回 mongoV2.ErrClientDisconnected。

func (*Client) Find

func (c *Client) Find(ctx context.Context, collection string, filter interface{}, results interface{}) error

Find 查询多个文档

func (*Client) FindOne

func (c *Client) FindOne(ctx context.Context, collection string, filter interface{}, result interface{}) error

FindOne 查询单个文档

func (*Client) FindOneAndUpdate

func (c *Client) FindOneAndUpdate(ctx context.Context, collection string, filter, update interface{}, result interface{}, opts ...optionsV2.Lister[optionsV2.FindOneAndUpdateOptions]) error

FindOneAndUpdate 在集合中查找并更新单个文档,结果 Decode 到 result 参数。 可传入可选的 *optionsV2.FindOneAndUpdateOptions。

func (*Client) InsertMany

func (c *Client) InsertMany(ctx context.Context, collection string, documents []interface{}) (*mongoV2.InsertManyResult, error)

InsertMany 插入多个文档

func (*Client) InsertOne

func (c *Client) InsertOne(ctx context.Context, collection string, document interface{}) (*mongoV2.InsertOneResult, error)

InsertOne 插入单个文档

func (*Client) UpdateMany

func (c *Client) UpdateMany(ctx context.Context, collection string, filter, update interface{}) (*mongoV2.UpdateResult, error)

UpdateMany 更新多个文档

func (*Client) UpdateOne

func (c *Client) UpdateOne(ctx context.Context, collection string, filter, update interface{}) (*mongoV2.UpdateResult, error)

UpdateOne 更新单个文档

type Option

type Option func(o *Client)

func WithBSONOptions

func WithBSONOptions(opt *optionsV2.BSONOptions) Option

func WithConnectTimeout

func WithConnectTimeout(connectTimeout time.Duration) Option

func WithCredentials

func WithCredentials(username, password string) Option

func WithDatabase

func WithDatabase(database string) Option

func WithHeartbeatInterval

func WithHeartbeatInterval(interval time.Duration) Option

func WithLocalThreshold

func WithLocalThreshold(threshold time.Duration) Option

func WithLogger

func WithLogger(logger log.Logger) Option

func WithMaxConnIdleTime

func WithMaxConnIdleTime(maxIdleTime time.Duration) Option

func WithServerSelectionTimeout

func WithServerSelectionTimeout(serverSelectionTimeout time.Duration) Option

func WithTLSConfig

func WithTLSConfig(tlsConfig *tls.Config) Option

func WithTimeout

func WithTimeout(timeout time.Duration) Option

func WithURI

func WithURI(uri string) Option

type Repository

type Repository[DTO any, ENTITY any] struct {
	// contains filtered or unexported fields
}

Repository MongoDB 版仓库(泛型)

func NewRepository

func NewRepository[DTO any, ENTITY any](client *Client, collection string, mapper *mapper.CopierMapper[DTO, ENTITY], logger *log.Helper) *Repository[DTO, ENTITY]

func (*Repository[DTO, ENTITY]) BatchCreate

func (r *Repository[DTO, ENTITY]) BatchCreate(ctx context.Context, dtos []*DTO) ([]*DTO, error)

BatchCreate 批量插入

func (*Repository[DTO, ENTITY]) Count

func (r *Repository[DTO, ENTITY]) Count(ctx context.Context, qb *query.Builder) (int64, error)

Count 按给定 builder 中的 filter 统计数量

func (*Repository[DTO, ENTITY]) Create

func (r *Repository[DTO, ENTITY]) Create(ctx context.Context, dto *DTO) (*DTO, error)

Create 插入一条记录

func (*Repository[DTO, ENTITY]) Delete

func (r *Repository[DTO, ENTITY]) Delete(ctx context.Context, qb *query.Builder) (int64, error)

Delete 根据 qb 中的 filter 删除(硬删除)

func (*Repository[DTO, ENTITY]) Exists

func (r *Repository[DTO, ENTITY]) Exists(ctx context.Context, qb *query.Builder) (bool, error)

Exists 判断是否存在符合 qb 的记录

func (*Repository[DTO, ENTITY]) Get

func (r *Repository[DTO, ENTITY]) Get(ctx context.Context, qb *query.Builder, viewMask *fieldmaskpb.FieldMask) (*DTO, error)

Get 根据过滤条件返回单条记录(使用 FilterExpr 或 Query/OrQuery 前置构建 qb)

func (*Repository[DTO, ENTITY]) ListWithPagination

func (r *Repository[DTO, ENTITY]) ListWithPagination(ctx context.Context, req *paginationV1.PaginationRequest) ([]*DTO, int64, error)

ListWithPagination 针对 paginationV1.PaginationRequest 的列表查询

func (*Repository[DTO, ENTITY]) ListWithPaging

func (r *Repository[DTO, ENTITY]) ListWithPaging(ctx context.Context, req *paginationV1.PagingRequest) ([]*DTO, int64, error)

ListWithPaging 针对 paginationV1.PagingRequest 的列表查询(兼容 Query/OrQuery/FilterExpr)

func (*Repository[DTO, ENTITY]) Update

func (r *Repository[DTO, ENTITY]) Update(ctx context.Context, qb *query.Builder, updateDoc interface{}) (*DTO, error)

Update 根据 filter 在 qb 中定位并更新(qb 应包含 where/selector info)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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