mgo类

package module
v0.0.0-...-5ed2d9f Latest Latest
Warning

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

Go to latest
Published: Jul 23, 2024 License: Apache-2.0 Imports: 19 Imported by: 0

README

Qmgo

Build Status Coverage Status Go Report Card GitHub release GoDoc

English | 简体中文

Qmgo is a Go driver for MongoDB . It is based on MongoDB official driver, but easier to use like mgo (such as the chain call).

  • Qmgo allows users to use the new features of MongoDB in a more elegant way.

  • Qmgo is the first choice for migrating from mgo to the new MongoDB driver with minimal code changes.

// md5:352d18eff92a20ab## # 特性

  • 支持所有官方选项的文档创建、读取、更新和删除(CRUD)
  • 排序(Sort)、限制(Limit)、计数(Count)、选择(Select)、唯一(Distinct)
  • 事务处理
  • 钩子(Hooks):用于在操作前后执行自定义功能
  • 自动默认字段和自定义字段
  • 预定义操作符键
  • 聚合操作、索引操作、游标管理
  • 验证标签:用于数据校验
  • 插件支持

特性

  • 支持所有官方选项的文档创建、读取、更新和删除(CRUD)
  • 排序(Sort)、限制(Limit)、计数(Count)、选择(Select)、唯一(Distinct)
  • 事务处理
  • 钩子(Hooks):用于在操作前后执行自定义功能
  • 自动默认字段和自定义字段
  • 预定义操作符键
  • 聚合操作、索引操作、游标管理
  • 验证标签:用于数据校验
  • 插件支持

// md5:41394b5b99ea90b1

  • Use go mod to automatically install dependencies by import github.com/qiniu/qmgo

Or

  • Use go get github.com/qiniu/qmgo

// md5:2bf52807f1a8969d

Below we give an example of multi-file search、sort and limit to illustrate the similarities between qmgo and mgo and the improvement compare to go.mongodb.org/mongo-driver. How do we do ingo.mongodb.org/mongo-driver:

// go.mongodb.org/mongo-driver
// find all, sort and limit
findOptions := options.Find()
findOptions.SetLimit(7) // set limit
var sorts D
sorts = append(sorts, E{Key: "weight", Value: 1})
findOptions.SetSort(sorts) // set sort

batch := []UserInfo{}
cur, err := coll.Find(ctx, bson.M{"age": 6}, findOptions)
cur.All(ctx, &batch)

How do we do in Qmgo and mgo:

// qmgo
// find all, sort and limit
batch := []UserInfo{}
cli.Find(ctx, bson.M{"age": 6}).Sort("weight").Limit(7).All(&batch)

// mgo
// find all, sort and limit
coll.Find(bson.M{"age": 6}).Sort("weight").Limit(7).All(&batch)

# Qmgomgo的区别

QMGO与Mgo之间的差异

Qmgomgo的区别

QMGO与Mgo之间的差异

// md5:ff308faf71e49c1b

The Qmgo project welcomes all contributors. We appreciate your help!

# 交流:

交流:

// md5:6b6ac083a753ecb9

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrQueryNotSlicePointer 如果结果参数不是一个切片的指针,返回此错误 md5:99bf2bfe686c166d
	X错误_结果参数_必须切片指针 = errors.New("result argument must be a pointer to a slice")
	// ErrQueryNotSliceType 如果结果参数不是切片的地址时返回错误 md5:a70365d8a017acd7
	X错误_结果参数_必须切片地址 = errors.New("result argument must be a slice address")
	// ErrQueryResultTypeInconsistent 如果查询结果类型与MongoDB值类型不一致时返回 md5:940d09b0f6052a9f
	X错误_查询结果_类型不一致 = errors.New("result type is not equal mongodb value type")
	// ErrQueryResultValCanNotChange 如果结果值不能更改,返回这个错误 md5:95f73ebb72c4463a
	X错误_结果值不能更改 = errors.New("the value of result can not be changed")
	// ErrNoSuchDocuments 如果未找到文档,则返回此错误 md5:381e7dce5c56bc42
	X错误_未找到文档 = mongo.ErrNoDocuments
	// ErrTransactionRetry 如果事务需要重试时返回该错误 md5:82e274f71f7c0175
	X错误_事务_重试 = errors.New("retry transaction")
	// ErrTransactionNotSupported 如果不支持事务,则返回该错误 md5:97ad2e1fbe2e7207
	X错误_事务_不支持 = errors.New("transaction not supported")
	// ErrNotSupportedUsername 如果用户名无效,则返回此错误 md5:c9df5d462362cad6
	X错误_不支持用户名 = errors.New("username not supported")
	// ErrNotSupportedPassword 如果密码无效时返回 md5:e9df4f7f8304cc70
	X错误_不支持密码 = errors.New("password not supported")
	// ErrNotValidSliceToInsert 如果插入的参数不是一个有效的切片,返回该错误 md5:2b940e5853972183
	X错误_插入_无效切片 = errors.New("must be valid slice to insert")
	// ErrReplacementContainUpdateOperators 如果替换文档中包含更新操作符,返回错误 md5:4f127578930f91fa
	X错误_替换_文档含更新操作符 = errors.New("replacement document cannot contain keys beginning with '$'")
)

Functions

func X分割排序字段

func X分割排序字段(文本 string) (名称 string, sort int32)

SplitSortField 处理排序符号:字段前的"+"或"-" 如果是"+",返回排序为1 如果是"-",返回排序为-1 md5:184424f8495a3828

func X取当前时间

func X取当前时间() time.Time

现在返回当前毫秒时间 md5:72f6986042eee15a

func X是否为无文档错误

func X是否为无文档错误(错误 error) bool

IsErrNoDocuments 检查错误是否表示没有找到文档,既包括 mongo-go-driver 的错误也包括 qmgo 自定义的错误 已弃用,直接判断 err == ErrNoSuchDocuments 或者 err == mongo.ErrNoDocuments 即可 md5:a9bcbf0c80c5509c

func X是否为重复键错误

func X是否为重复键错误(错误 error) bool

IsDup 检查错误是否为MongoDB的E11000(重复错误)。 md5:4a3435e9efa67970

func X比较版本号

func X比较版本号(版本号1 string, 版本号2 string) (int, error)

CompareVersions 比较两个版本号字符串(即由点分隔的正整数)。比较是在两个版本中较低精度的基础上进行的。例如,3.2 被认为等于 3.2.11,而 3.2.0 则被认为小于 3.2.11。

如果 version1 大于 version2,返回一个正整数;如果 version1 小于 version2,返回一个负整数;如果 version1 等于 version2,则返回 0。 md5:4b6863e7e41f1627比较版本号

func X生成对象ID

func X生成对象ID() primitive.ObjectID

NewObjectID 生成一个新的 ObjectID。 注意:它生成 ObjectID 的方式与 mgo 不同。 md5:1225b5a9fc54eeee

Types

type A

type A = bson.A

[]interface{},如:bson.A{"bar", "world", 3.14159, bson.D{{"qux", 12345}}} , A是bson.A的别名 md5:7a6f09b99ea36324

type Aggregate

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

Aggregate是一个聚合的句柄 md5:e06636d2fc45e004

func (*Aggregate) Iter弃用

func (a *Aggregate) Iter弃用() CursorI

Iter 返回聚合后的游标 已弃用,请使用Cursor md5:722184e644380849

func (*Aggregate) X取一条

func (a *Aggregate) X取一条(结果指针 interface{}) error

One 从聚合结果中遍历游标,并将当前文档解码到结果中。 md5:95d05e20ff85babc

func (*Aggregate) X取全部

func (a *Aggregate) X取全部(结果指针 interface{}) error

All 遍历聚合的游标,并将每个文档解码为结果。 md5:22b8eb7acebfa36a

func (*Aggregate) X取结果集

func (a *Aggregate) X取结果集() CursorI

Cursor返回聚合后的游标 md5:eac4fdc1facaf217

type AggregateI

type AggregateI interface {
	X取全部(results interface{}) error
	X取一条(result interface{}) error
	Iter弃用() CursorI // 被弃用,请使用Cursor替代 md5:56d9bc403e9aa9a9
	X取结果集() CursorI
}

AggregateI 定义聚合接口 md5:e67c5263d98eafa6

type Bulk

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

Bulk 是用于批量操作的上下文,这些操作将一次性发送到数据库进行批量写入。

Bulk 不适用于并发使用。

注意:

在批量操作中的单个操作目前不会触发中间件或钩子。

与原版 mgo 不同,qmgo 实现的 Bulk 并不会在不支持原生批量操作的老版本 MongoDB 服务器上模拟逐个执行批量操作。

只有官方驱动支持的操作被暴露出来,因此方法中缺少 InsertMany。 md5:97e7f3c645b8ba7f

func (*Bulk) X删除

func (b *Bulk) X删除(删除条件 interface{}) *Bulk

RemoveAll 会将一个 RemoveAll 操作加入到批量执行的队列中。 md5:df548d516b324574

func (*Bulk) X删除一条

func (b *Bulk) X删除一条(删除条件 interface{}) *Bulk

Remove 队列一个删除操作,用于批量执行。 md5:a9c84e1a291eea0f

func (*Bulk) X删除并按ID

func (b *Bulk) X删除并按ID(删除ID interface{}) *Bulk

RemoveId 队列一个 RemoveId 操作以进行批量执行。 md5:f3fbfef26bde41fc

func (*Bulk) X执行

func (b *Bulk) X执行(上下文 context.Context) (*BulkResult, error)

Run 执行收集到的单个批量操作。

调用成功会重置 Bulk。如果返回错误,内部操作队列保持不变,包含成功和失败的操作。 md5:c3ce14d8defe8da0

func (*Bulk) X插入

func (b *Bulk) X插入(待插入文档 interface{}) *Bulk

InsertOne 将一个 InsertOne 操作加入到批量执行队列中。 md5:65abbf989aa97556

func (*Bulk) X更新

func (b *Bulk) X更新(更新条件 interface{}, 更新内容 interface{}) *Bulk

UpdateAll 队列一个 UpdateAll 操作,用于批量执行。 更新应该包含操作符 md5:b1fdc26a48273948

func (*Bulk) X更新一条

func (b *Bulk) X更新一条(更新条件 interface{}, 更新内容 interface{}) *Bulk

UpdateOne 为批量执行队列一个 UpdateOne 操作。更新操作应该包含操作符 md5:0e587045b560687a

func (*Bulk) X更新并按ID

func (b *Bulk) X更新并按ID(更新ID interface{}, 更新内容 interface{}) *Bulk

UpdateId 为批量执行排队一个 UpdateId 操作。更新应该包含操作符 md5:968d7d02f007ae39

func (*Bulk) X替换插入

func (b *Bulk) X替换插入(替换条件 interface{}, 替换内容 interface{}) *Bulk

Upsert将Upsert操作排队进行批量执行。替换应该是没有操作符的文档 md5:1115932f50b88737

func (*Bulk) X替换插入一条

func (b *Bulk) X替换插入一条(替换条件 interface{}, 替换内容 interface{}) *Bulk

UpsertOne 为批量执行队列一个 UpsertOne 操作。更新操作应该包含运算符 md5:7052a86d53229aab一条

func (*Bulk) X替换插入并按ID

func (b *Bulk) X替换插入并按ID(替换ID interface{}, 替换内容 interface{}) *Bulk

UpsertId 用于批量执行的UpsertId操作进行排队。 替换的文档应该不包含操作符。 md5:c5d9cc678823f8e5并按ID

func (*Bulk) X设置有序执行

func (b *Bulk) X设置有序执行(开启有序 bool) *Bulk

SetOrdered 将批量设置为有序或无序。

如果设置为有序,写操作在单个写操作失败后不会继续。默认为有序。 md5:caf2eac3fe50a750

type BulkResult

type BulkResult struct {
	// 插入的文档数量。 md5:f44082352897f08b
	X插入数 int64

	// 更新和替换操作中,被过滤器匹配的文档数量。 md5:90fab681d83f2e97
	X匹配数 int64

	// 被更新和替换操作修改的文档数量。 md5:1e4886e32c8092e3
	X修改数 int64

	// 删除的文档数量。 md5:8872e8629ebbcf3c
	X删除数 int64

	// 通过update和replace操作插入的文档数量。 md5:3074b4c76263ae0c
	X替换插入数 int64

	// 一个操作索引到每个插入文档的_id的映射。 md5:b4c301dceb41d860
	X替换插入IDs map[int64]interface{}
}

BulkResult 是由Bulk.Run操作返回的结果类型。 md5:3a422d6b1b20649c

type Change

type Change struct {
	X更新替换     interface{} // 更新/替换文档 md5:f186fdee95ec3578
	X是否替换     bool        // 是否替换文档而不是更新 md5:876d0fb0ea394e91
	X是否删除     bool        // 是否在找到文档后删除它,而不是更新 md5:af3a9b450dfa43f8
	X是否未找到时插入 bool        // Whether to insert in case the document isn't found, take effect when Remove is false
	X是否返回新文档  bool        // 当Remove为false时,是否返回修改后的文档而不是旧的文档 md5:52269f57ce5c8033
}

Change 包含了通过 Query.Apply 方法运行 findAndModify 命令时所需字段。 md5:39a15027acb265c1

type Client

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

Client 创建一个到Mongo的客户端 md5:3527d3de272044c3

func X创建客户端

func X创建客户端(上下文 context.Context, 配置 *Config, 可选选项 ...options.ClientOptions) (客户端 *Client, 错误 error)

NewClient 创建 Qmgo MongoDB 客户端 md5:64c9dc0f30edc1ac

func (*Client) X事务

func (c *Client) X事务(上下文 context.Context, 回调函数 func(事务上下文 context.Context) (interface{}, error), 可选选项 ...*options.TransactionOptions) (interface{}, error)

DoTransaction 在一个函数中执行整个事务 前置条件: - MongoDB服务器的版本 >= v4.0 - MongoDB服务器的拓扑结构不是Single 同时需要注意以下几点: - 确保回调中的所有操作都使用sessCtx作为context参数 - 如果回调中的操作(包括等于)耗时超过120s,操作将不会生效 - 如果回调中的操作返回qmgo.ErrTransactionRetry,整个事务将重试,因此该事务必须幂等 - 如果回调中的操作返回qmgo.ErrTransactionNotSupported, - 如果ctx参数已经绑定了Session,它将被这个Session替换。 md5:f5555fc9e2733cb9

func (*Client) X关闭连接

func (c *Client) X关闭连接(上下文 context.Context) error

Close 关闭到此客户端引用的拓扑结构相关的套接字。 md5:a2c78aacda5cd470

func (*Client) X创建Session事务

func (c *Client) X创建Session事务(可选选项 ...*options.SessionOptions) (*Session, error)

Session:在客户端创建一个会话 注意,操作完成后要关闭会话 md5:a25c6035ffabaf48

func (*Client) X取版本号

func (c *Client) X取版本号() string

ServerVersion 获取MongoDB服务器的版本,如4.4.0 md5:85f19b2205255d3a

func (*Client) X是否存活

func (c *Client) X是否存活(超时时长 int64) error

Ping确认连接是否还活着 md5:1b88dbe0bbaa6726

func (*Client) X设置数据库

func (c *Client) X设置数据库(数据库名称 string, 可选选项 ...*options.DatabaseOptions) *Database

Database 创建到数据库的连接 md5:1aa03639d9adcf41

type Collection

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

Collection 是一个MongoDB集合的句柄 md5:be1b94030609bdd1

func (*Collection) EnsureIndexes弃用

func (c *Collection) EnsureIndexes弃用(ctx context.Context, uniques []string, indexes []string) (err error)

确保索引(已弃用) 建议使用CreateIndexes / CreateOneIndex以获取更多功能) EnsureIndexes 在集合中创建唯一和非唯一的索引,与CreateIndexes的组合不同: 如果uniques/indexes是`[]string{"name"}`,意味着创建名为"name"的索引 如果uniques/indexes是`[]string{"name,-age", "uid"}`,表示创建复合索引:name和-age,然后创建一个索引:uid md5:c595ad59f9c60c06

func (*Collection) X创建多条索引

func (c *Collection) X创建多条索引(上下文 context.Context, 索引s []opts.IndexModel) (错误 error)

CreateIndexes 在集合中创建多个索引 如果opts.IndexModel中的Key为[]string{"name"},表示创建索引:name 如果opts.IndexModel中的Key为[]string{"name", "-age"},表示创建复合索引:name和-age md5:822a787892c2186f索引s

func (*Collection) X创建批量执行

func (c *Collection) X创建批量执行() *Bulk

Bulk返回一个新的上下文,用于准备批量执行操作。 md5:e39897d617450e92

func (*Collection) X创建索引

func (c *Collection) X创建索引(上下文 context.Context, 索引 opts.IndexModel) error

CreateOneIndex 创建一个索引 如果opts.IndexModel中的Key为[]string{"name"},表示创建名为"name"的索引 如果opts.IndexModel中的Key为[]string{"name","-age"},表示创建复合索引:按照"name"升序和"age"降序 md5:70c27ea42ff3bbbf

func (*Collection) X删除

func (c *Collection) X删除(上下文 context.Context, 删除条件 interface{}, 可选选项 ...opts.RemoveOptions) (删除结果 *DeleteResult, 错误 error)

RemoveAll 执行一个删除命令,从集合中删除文档。如果 filter 是 bson.M{}(空映射),则会删除集合中的所有文档。 参考:https://docs.mongodb.com/manual/reference/command/delete/ md5:abc51456adc5fc5a

func (*Collection) X删除一条

func (c *Collection) X删除一条(上下文 context.Context, 删除条件 interface{}, 可选选项 ...opts.RemoveOptions) (错误 error)

Remove 执行删除命令,从集合中最多删除一个文档。 如果 filter 是 bson.M{},DeleteOne 将删除集合中的一个文档。 参考:https://docs.mongodb.com/manual/reference/command/delete/ md5:3b5cf64ce5f460b0

func (*Collection) X删除全部索引

func (c *Collection) X删除全部索引(上下文 context.Context) (错误 error)

DropAllIndexes 会删除集合上除了_id字段索引之外的所有索引 如果集合上只有_id字段的索引,该函数调用将报告错误 md5:e7655b40436f93df全部索引

func (*Collection) X删除并按ID

func (c *Collection) X删除并按ID(上下文 context.Context, 删除ID interface{}, 可选选项 ...opts.RemoveOptions) (错误 error)

RemoveId 执行删除命令,从集合中删除最多一个文档。 md5:6516d8a8963d018c

func (*Collection) X删除索引

func (c *Collection) X删除索引(上下文 context.Context, 索引s []string) error

DropIndex 从集合中删除索引,需要删除的索引应与输入的索引列表匹配 索引是 []string{"name"} 表示删除名为 "name" 的单个索引 索引是 []string{"name", "-age"} 表示删除复合索引:name 和排除年龄 (-age) 的部分索引 md5:4ad77e88557061c7索引索引s

func (*Collection) X删除集合

func (c *Collection) X删除集合(上下文 context.Context) error

DropIndexDropIndex 会删除索引 即使索引不存在,这个操作也是安全的 md5:e7b65cd93b1de7f7集合

func (*Collection) X取副本

func (c *Collection) X取副本() (*mongo.Collection, error)

CloneCollection 创建集合的副本 md5:5df787f1c8ebab26

func (*Collection) X取变更流

func (c *Collection) X取变更流(上下文 context.Context, 管道 interface{}, 可选选项 ...*opts.ChangeStreamOptions) (*mongo.ChangeStream, error)

Watch 返回对应集合上所有更改的流。有关更改流的更多信息,请参阅 md5:7b59cfd256c148f3

func (*Collection) X取集合名

func (c *Collection) X取集合名() string

GetCollectionName 返回集合的名字 md5:440484db8f2a466d

func (*Collection) X插入

func (c *Collection) X插入(上下文 context.Context, 待插入文档 interface{}, 可选选项 ...opts.InsertOneOptions) (插入结果 *InsertOneResult, 错误 error)

InsertOne 将一个文档插入到集合中 如果在 opts 中设置了 InsertHook,钩子将在其上执行,否则钩子会尝试处理 doc 作为钩子 参考: https://docs.mongodb.com/manual/reference/command/insert/ md5:0255181bb812302d

func (*Collection) X插入多个

func (c *Collection) X插入多个(上下文 context.Context, 待插入文档 interface{}, 可选选项 ...opts.InsertManyOptions) (插入结果 *InsertManyResult, 错误 error)

InsertMany 执行插入命令,将多个文档插入到集合中。如果opts中的InsertHook被设置,将在其上应用钩子;否则,尝试将doc作为钩子使用。 参考:https://docs.mongodb.com/manual/reference/command/insert/ md5:49f2d7776e74fa79

func (*Collection) X更新

func (c *Collection) X更新(上下文 context.Context, 更新条件 interface{}, 更新内容 interface{}, 可选选项 ...opts.UpdateOptions) (更新结果 *UpdateResult, 错误 error)

UpdateAll 执行更新命令以更新集合中的文档。 如果没有文档被更新,UpdateResult 中的 matchedCount 将为 0 参考资料: https://docs.mongodb.com/manual/reference/operator/update/ md5:94c36e4a82312809

func (*Collection) X更新一条

func (c *Collection) X更新一条(上下文 context.Context, 更新条件 interface{}, 更新内容 interface{}, 可选选项 ...opts.UpdateOptions) (错误 error)

UpdateOne 执行一个更新命令,最多更新集合中的一份文档。 参考:https://docs.mongodb.com/manual/reference/operator/update/ md5:a16e90f28370dc2c

func (*Collection) X更新并按ID

func (c *Collection) X更新并按ID(上下文 context.Context, 更新ID interface{}, 更新内容 interface{}, 可选选项 ...opts.UpdateOptions) (错误 error)

UpdateId 执行一个更新命令,最多更新集合中的一个文档。 参考:https://docs.mongodb.com/manual/reference/operator/update/ md5:67764db9e90007e8

func (*Collection) X替换一条

func (c *Collection) X替换一条(上下文 context.Context, 替换条件 interface{}, 替换内容 interface{}, 可选选项 ...opts.ReplaceOptions) (错误 error)

ReplaceOne 执行更新命令,最多更新集合中的一个文档。如果 opts 中的 UpdateHook 被设置,那么 Hook 将在其上执行,否则 Hook 尝试将 doc 作为 Hook。预期 doc 的类型是用户定义的文档的定义。 md5:1d830477f8b32e37

func (*Collection) X替换插入

func (c *Collection) X替换插入(上下文 context.Context, 替换条件 interface{}, 替换内容 interface{}, 可选选项 ...opts.UpsertOptions) (结果 *UpdateResult, 错误 error)

Upsert 如果过滤器匹配,则更新一个文档,如果过滤器不匹配,则插入一个文档。如果过滤器无效,会返回错误。 替换参数必须是一个将用于替换所选文档的文档。它不能为nil,且不能包含任何更新运算符。 参考:https://docs.mongodb.com/manual/reference/operator/update/ 如果替换参数包含"_id"字段并且文档已存在,请使用现有ID初始化(即使使用Qmgo默认字段特性也是如此)。否则,会引发"(不可变)字段 '_id' 被修改"的错误。 md5:d7464af9e1e36d77

func (*Collection) X替换插入并按ID

func (c *Collection) X替换插入并按ID(上下文 context.Context, 替换ID interface{}, 替换内容 interface{}, 可选选项 ...opts.UpsertOptions) (结果 *UpdateResult, 错误 error)

UpsertId 如果id匹配,则更新一个文档,如果id不匹配,则插入一个新的文档,并将id注入到文档中。 注意,id是十六进制, 不是文本型, 需要转换后查询. 替换参数必须是一个将用于替换所选文档的文档。它不能为空,并且不能包含任何更新操作符。 参考:https://docs.mongodb.com/manual/reference/operator/update/ md5:2a704aa664092959

func (*Collection) X查询

func (c *Collection) X查询(上下文 context.Context, 查询条件 interface{}, 可选选项 ...opts.FindOptions) QueryI

Find 通过条件过滤并查找,返回QueryI md5:bda4cc0c85d800a1

func (*Collection) X聚合

func (c *Collection) X聚合(上下文 context.Context, 聚合管道 interface{}, 可选选项 ...opts.AggregateOptions) AggregateI

Aggregate 在集合上执行聚合命令,并返回一个 AggregateI,用于获取结果文档。 md5:e57ffed517c59fbc

type Config

type Config struct {
	// URI 示例:[mongodb://][user:pass@]主机1[:端口1][,主机2[:端口2],...][/数据库][?选项]
	// URI 参考:https://docs.mongodb.com/manual/reference/connection-string/
	//
	// 这段注释解释了一个MongoDB连接字符串的格式,包括可选的部分如用户名、密码、多个服务器地址、数据库名以及可选的连接选项。URI以`mongodb://`开头,后面可以包含认证信息、主机列表、数据库路径和查询参数。链接:提供了官方文档的参考。
	// md5:038c28929efbdde0
	X连接URI string `json:"uri"`
	X数据库名  string `json:"database"`
	X集合名   string `json:"coll"`
	// ConnectTimeoutMS 指定了建立到服务器连接时使用的超时时间,以毫秒为单位。
	// 如果设置为 0,则不会使用超时。
	// 默认值为 30 秒。
	// md5:bdc6b23048c25478
	X连接超时毫秒 *int64 `json:"connectTimeoutMS"`
	// MaxPoolSize 指定驱动程序连接池到每个服务器的最大连接数。
	// 如果设置为 0,则将其设置为 math.MaxInt64,
	// 默认值为 100。
	// md5:6840c2846a8fad6e
	X最大连接池大小 *uint64 `json:"maxPoolSize"`
	// MinPoolSize 指定了驱动程序到每个服务器的连接池中允许的最小连接数。如果此值不为零,将为每个服务器的连接池在后台维护,以确保其大小不低于最小值。这也可以通过 "minPoolSize" URI 选项(如 "minPoolSize=100")进行设置。默认值为 0。
	// md5:9df8b44a6800236b
	X最小连接池大小 *uint64 `json:"minPoolSize"`
	// SocketTimeoutMS 指定了驱动程序在返回网络错误之前,等待套接字读写操作返回的最长时间(以毫秒为单位)。如果此值为0,则表示不使用超时,套接字操作可能无限期阻塞。默认值为300,000毫秒。
	// md5:1e1ccf1f35a18417
	X套接字超时毫秒 *int64 `json:"socketTimeoutMS"`
	// ReadPreference 确定哪些服务器适合进行读取操作。默认为 PrimaryMode。
	// md5:6ca3a191c28443b8
	X读取偏好 *ReadPref `json:"readPreference"`
	// 可用于在配置客户端时提供身份验证选项。 md5:99c19d7fabc83d2d
	X身份凭证 *Credential `json:"auth"`
}

初始MongoDB实例的配置 md5:09dcbab1d00adb46

type Credential

type Credential struct {
	X认证机制       string `json:"authMechanism"`
	X认证源        string `json:"authSource"`
	X用户名        string `json:"username"`
	X密码         string `json:"password"`
	PasswordSet bool   `json:"passwordSet"`
}

Credential 用于在配置客户端时提供认证选项。

AuthMechanism: 认证机制。支持的值包括 "SCRAM-SHA-256", "SCRAM-SHA-1", "MONGODB-CR", "PLAIN", "GSSAPI", "MONGODB-X509" 和 "MONGODB-AWS"。 这也可以通过 "authMechanism" URI 选项设置(例如 "authMechanism=PLAIN")。更多信息请参阅 https://docs.mongodb.com/manual/core/authentication-mechanisms/。 AuthSource: 用于认证的数据库名称。对于 MONGODB-X509、GSSAPI 和 PLAIN,默认为 "$external",对于所有其他机制默认为 "admin"。 这也可以通过 "authSource" URI 选项设置(例如 "authSource=otherDb")。

Username: 认证用的用户名。这也可以通过 URI 在第一个 @ 字符前设置用户名和密码。例如,用户 "user",密码 "pwd", 主机 "localhost:27017" 的 URI 为 "mongodb://user:pwd@localhost:27017"。对于 X509 认证这是可选的,如果没有指定,将从客户端证书中提取。

Password: 认证用的密码。对于 X509 不允许指定,对于 GSSAPI 是可选的。

PasswordSet: 对于 GSSAPI,如果指定了密码(即使密码为空字符串),此值必须为 true,如果未指定密码,表示应从运行进程的上下文中获取密码。 对于其他机制,此字段会被忽略。 md5:e1c2a73d163c799a

type Cursor

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

Cursor struct define

func (*Cursor) X下一个

func (c *Cursor) X下一个(result interface{}) bool

Next 获取此游标下的下一个文档。如果未发生错误且游标未耗尽,它将返回true。 md5:29446221269baaee

func (*Cursor) X关闭

func (c *Cursor) X关闭() error

Close 关闭这个游标。在调用 Close 之后,不应再调用 Next 或 TryNext。 当游标对象不再使用时,应主动关闭它。 md5:7c67b9468038ed61

func (*Cursor) X取全部

func (c *Cursor) X取全部(results interface{}) error

All 使用游标遍历每个文档,并将其解码到结果中。results 参数必须是指向切片的指针。 建议在 struct Query 或 Aggregate 中使用 All() 方法。 md5:283225edc771266b

func (*Cursor) X取错误

func (c *Cursor) X取错误() error

Err 返回Cursor的最后一个错误,如果没有发生错误,则返回nil md5:2ebbf5e5b4796f72

type CursorI

type CursorI interface {
	X下一个(result interface{}) bool
	X关闭() error
	X取错误() error
	X取全部(results interface{}) error
}

CursorI:Cursor 接口 md5:8a6fa5bfcb19cd93

type D

type D = bson.D

Key/Value结构体数组, 如:bson.D{{"foo", "bar"}, {"hello", "world"}, {"pi", 3.14159}} ,D是 bson.D 的别名 md5:a2fd7b05e87775b6

type Database

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

Database 是一个指向 MongoDB 数据库的句柄 md5:9217ae5bd9047e3a

func (*Database) X创建集合

func (db *Database) X创建集合(上下文 context.Context, 集合名称 string, 可选选项 ...options.CreateCollectionOptions) error

CreateCollection 执行一个创建命令,明确在服务器上使用指定名称创建一个新的集合。如果正在创建的集合已经存在,此方法将返回一个 mongo.CommandError。此方法需要驱动程序版本 1.4.0 或更高版本。

参数 opts 可用于指定操作选项(请参阅 options.CreateCollectionOptions 的文档)。 md5:7bd165db4ed05d28

func (*Database) X删除数据库

func (d *Database) X删除数据库(上下文 context.Context) error

DropDatabase 删除数据库 md5:aeac2378daa25d5f

func (*Database) X取数据库名称

func (d *Database) X取数据库名称() string

GetDatabaseName 返回数据库的名称 md5:716064a488e6db8b

func (*Database) X取集合

func (d *Database) X取集合(名称 string, 可选选项 ...*options.CollectionOptions) *Collection

Collection 从数据库中获取集合 md5:c5489f5523d5a33d

func (*Database) X执行命令

func (d *Database) X执行命令(上下文 context.Context, runCommand interface{}, 可选选项 ...options.RunCommandOptions) *mongo.SingleResult

RunCommand 在数据库上执行给定的命令。

runCommand 参数必须是将要执行的命令文档。它不能为 nil。这必须是一个保持顺序的类型,如 bson.D。像 bson.M 这样的映射类型是无效的。 如果命令文档包含会话 ID 或任何事务特定字段,其行为是未定义的。

可以使用 opts 参数来指定此操作的选项(参阅 options.RunCmdOptions 的文档)。 md5:eb93f7217a15650c

type DeleteResult

type DeleteResult struct {
	X删除数量 int64 // 删除的文档数量。 md5:8872e8629ebbcf3c
}

DeleteResult 是 DeleteOne 和 DeleteMany 操作返回的结果类型。 md5:2c6c8718a901fb46

type E

type E = bson.E

Key/Value结构体, E 内部的单个元素,是bson.E的别名 md5:d1a800789b88ac58

type InsertManyResult

type InsertManyResult struct {
	// 插入文档的 `_id` 值。驱动程序生成的值类型为 `primitive.ObjectID`。 md5:7f2e18379f71d07a
	X插入IDs []interface{}
}

InsertManyResult 是一个由 InsertMany 操作返回的结果类型。 md5:9dcc2360964506ed

type InsertOneResult

type InsertOneResult struct {
	// 插入文档的 `_id`。驱动程序生成的值将为 primitive.ObjectID 类型。 md5:3e182da948916b02
	X插入ID interface{}
}

InsertOneResult 是InsertOne 操作返回的结果类型。 md5:6a10fcb030441781

type M

type M = bson.M

map[string]interface{} , 如:bson.M{"foo": "bar", "hello": "world", "pi": 3.14159}, M是 bson.M 的别名 md5:66b7bee0d7904542

type Pipeline

type Pipeline []bson.D

Pipeline 定义聚合操作的管道 md5:39821c5115607719

type QmgoClient

type QmgoClient struct {
	*Collection
	*Database
	*Client
}

QmgoClient 指定操作MongoDB的实例 md5:ef9044b4ab2af757

func X连接

func X连接(上下文 context.Context, 配置 *Config, 可选选项 ...options.ClientOptions) (Qmgo客户端 *QmgoClient, 错误 error)

Open 根据配置创建客户端实例 QmgoClient 可以操作所有 qmgo.client、qmgo.database 和 qmgo.collection md5:bc872aaa93cf801a

type Query

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

定义查询结构体 md5:56541bbc29d4ce15

func (*Query) X分页

func (q *Query) X分页(页码 int, 页大小 int) QueryI

zj:

func (*Query) X去重

func (q *Query) X去重(字段名 string, 切片指针 interface{}) error

Distinct 从集合中获取指定字段的唯一值,并以切片形式返回。 result 应该是一个指向切片的指针。 函数会检查result切片元素的静态类型是否与MongoDB中获取的数据类型一致。 参考:https://docs.mongodb.com/manual/reference/command/distinct/ md5:b83f3aa5718b2dfd

func (*Query) X取一条

func (q *Query) X取一条(结果指针 interface{}) error

对符合过滤条件的记录执行一次查询 如果搜索失败,将返回一个错误 md5:68571c814c5cd088

func (*Query) X取全部

func (q *Query) X取全部(结果指针 interface{}) error

用于查询满足过滤条件的所有记录 结果的静态类型必须是切片指针 md5:5f57d8aff8afe252

func (*Query) X取分页数

func (q *Query) X取分页数(perPage int) int

func (*Query) X取数量

func (q *Query) X取数量() (数量 int64, 错误 error)

Count 计算符合条件的条目数量 md5:7bed3eaaee1ce368

func (*Query) X取结果集

func (q *Query) X取结果集() CursorI

Cursor 获取一个 Cursor 对象,可用于遍历查询结果集 在获取到 CursorI 对象后,应主动调用 Close 接口来关闭游标 md5:b1e9fc62a5f777fe

func (*Query) X取预估数量

func (q *Query) X取预估数量() (数量 int64, 错误 error)

EstimatedCount 通过元数据计算集合的数量, EstimatedDocumentCount() 方法比 CountDocuments() 方法更快,因为它使用集合的元数据而不是扫描整个集合。 EstimatedCount 通过元数据计算集合的数量, EstimatedDocumentCount() 方法比 CountDocuments() 方法更快,因为它使用集合的元数据而不是扫描整个集合。 md5:8c9bd7e463139421

func (*Query) X字段

func (q *Query) X字段(字段Map interface{}) QueryI

Select用于确定在返回结果中显示或不显示哪些字段 格式:bson.M{"age": 1} 表示只显示age字段 bson.M{"age": 0} 表示除了age以外的其他字段都显示 如果不显示_id并且设置为0,它将被返回并显示 md5:3beb3c9bd51ad3fe

func (*Query) X执行命令

func (q *Query) X执行命令(change Change, result interface{}) error

Apply 执行 findAndModify 命令,该命令允许根据查询更新、替换或删除文档,并原子性地返回旧版本(默认)或新版本的文档(当 ReturnNew 为 true 时)。

Sort 和 Select 查询方法会影响 Apply 的结果。如果有多个文档匹配查询,Sort 可以通过排序来决定操作哪个文档。Select 则可以仅获取新或旧文档中选定字段的内容。

当 Change.Replace 为 true 时,意味着在集合中最多替换一个文档,且 update 参数必须是一个文档,不能包含任何更新运算符;如果没有找到对象并且 Change.Upsert 为 false,则会返回 ErrNoDocuments 错误。当 Change.Remove 为 true 时,意味着最多删除集合中的一个文档,并返回删除前的文档状态;如果没有找到对象,同样返回 ErrNoDocuments。

如果 Change.Replace 和 Change.Remove 都为 false,则表示最多更新集合中的一个文档,update 参数必须是一个包含更新运算符的文档;如果没有找到对象并且 Change.Upsert 为 false,则返回 ErrNoDocuments。

参考:https://docs.mongodb.com/manual/reference/command/findAndModify/ md5:e14e8d7ceac827ac

func (*Query) X指定索引字段

func (q *Query) X指定索引字段(索引字段 interface{}) QueryI

Hint 设置Hint字段的值。这应该是字符串形式的索引名称,或者是文档形式的索引规范。默认值为nil,表示不发送提示。 md5:3d3535508606dd43

func (*Query) X排序

func (q *Query) X排序(排序字段 ...string) QueryI

Sort 用于设置返回结果的排序规则 格式:"age" 或 "+age" 表示按年龄字段升序排序,"-age" 表示降序排序 同时传入多个排序字段时,按照字段传递的顺序进行排列。 例如,{"age", "-name"},首先按年龄升序排序,然后按姓名降序排序。 md5:0b1b9f5345904541

func (*Query) X设置不超时

func (q *Query) X设置不超时(是否不超时 bool) QueryI

func (*Query) X设置切片过滤

func (q *Query) X设置切片过滤(过滤条件 *options.ArrayFilters) QueryI

SetArrayFilter 用于应用更新数组的过滤器 示例: var res = QueryTestItem{}

change := Change{
    Update:    bson.M{"$set": bson.M{"instock.$[elem].qty": 100}},
    ReturnNew: false,
}

cli.Find(context.Background(), bson.M{"name": "Lucas"}).

SetArrayFilters(&options.ArrayFilters{Filters: []interface{}{bson.M{"elem.warehouse": bson.M{"$in": []string{"C", "F"}}},}}).
  Apply(change, &res)

这段代码的注释说明了`SetArrayFilter`方法是用于设置更新操作中的数组过滤器。它给出了一个例子,展示了如何使用该方法来更新名为"Lucas"的文档中,符合条件("elem.warehouse"在"C"或"F"中)的`instock`数组元素的`qty`字段为100。`Apply`方法最后将变更应用到查询结果上。 md5:3fa80906c918e6a3

func (*Query) X设置批量处理数量

func (q *Query) X设置批量处理数量(数量 int64) QueryI

BatchSize 设置 BatchSize 字段的值。 它表示服务器返回的每批文档的最大数量。 md5:66277d16095ac151

func (*Query) X设置排序规则

func (q *Query) X设置排序规则(规则 *options.Collation) QueryI

func (*Query) X设置最大返回数

func (q *Query) X设置最大返回数(数量 int64) QueryI

Limit 将找到的最大文档数量限制为 n 默认值为 0,0 表示无限制,返回所有匹配的结果 当限制值小于 0 时,负限制类似于正限制,但返回单个批次结果后关闭游标。 参考 https://docs.mongodb.com/manual/reference/method/cursor.limit/index.html md5:9081095bd35be08f

func (*Query) X跳过

func (q *Query) X跳过(跳过数量 int64) QueryI

Skip skip n records

type QueryI

type QueryI interface {
	//zj:type QueryI interface {
	X分页(页码 int, 页大小 int) QueryI
	X取分页数(perPage int) int
	//zj:
	X设置排序规则(collation *options.Collation) QueryI
	X设置切片过滤(*options.ArrayFilters) QueryI
	X排序(fields ...string) QueryI
	X字段(selector interface{}) QueryI
	X跳过(n int64) QueryI
	X设置批量处理数量(n int64) QueryI
	X设置不超时(n bool) QueryI
	X设置最大返回数(n int64) QueryI
	X取一条(result interface{}) error
	X取全部(result interface{}) error
	X取数量() (n int64, err error)
	X取预估数量() (n int64, err error)
	X去重(key string, result interface{}) error
	X取结果集() CursorI
	X执行命令(change Change, result interface{}) error
	X指定索引字段(hint interface{}) QueryI
}

QueryI Query interface

type ReadPref

type ReadPref struct {
	// MaxStaleness是允许服务器被认为适合选择的最大时间。从版本3.4开始支持。
	// md5:01c3097a5d9a368b
	X最大延迟毫秒 int64 `json:"maxStalenessMS"`
	// 表示用户在读取操作上的偏好。
	// 默认为PrimaryMode。
	// md5:85d94814e6ac8eca
	Mode readpref.Mode `json:"mode"`
}

ReadPref确定哪些服务器适合进行读取操作。 md5:d5ae507a40965ac9

type Session

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

Session 是一个结构体,表示 MongoDB 的逻辑会话 md5:a17367bc3a251e77

func (*Session) X中止事务

func (s *Session) X中止事务(上下文 context.Context) error

AbortTransaction 会取消此会话中的活动事务。如果此会话没有活动事务,或者事务已经提交或中止,此方法将返回错误。 md5:ca9bc056086304f0

func (*Session) X开始事务

func (s *Session) X开始事务(上下文 context.Context, 回调函数 func(事务上下文 context.Context) (interface{}, error), 可选选项 ...*opts.TransactionOptions) (interface{}, error)

StartTransaction 开始一个事务 预条件: - MongoDB服务器版本大于等于v4.0 - MongoDB服务器的拓扑结构不是单节点 同时需要注意:

  • 确保回调中的所有操作将sessCtx作为上下文参数
  • 如果不再使用session,别忘了调用EndSession
  • 如果回调中的操作耗时超过(包括等于)120秒,这些操作将不会生效
  • 如果回调中的操作返回qmgo.ErrTransactionRetry错误, 整个事务将会重试,因此这个事务必须是幂等的
  • 如果回调中的操作返回qmgo.ErrTransactionNotSupported错误,
  • 如果ctx参数中已经附加了一个Session,它将被此session替换。

md5:7a854b4c45212490

func (*Session) X结束Session

func (s *Session) X结束Session(上下文 context.Context)

EndSession 会终止任何现有的事务并关闭会话。 md5:2ee8849531868b7e

type UpdateResult

type UpdateResult struct {
	X匹配数    int64       // 过滤器匹配到的文档数量。 md5:cac9d662a816ba41
	X修改数    int64       // 该操作修改的文档数量。 md5:d5082cfa94d1e2ea
	X替换插入数  int64       // 由该操作上载的文档数量。 md5:0872523e362c0f10
	X替换插入ID interface{} // upsert文档的_id字段,如果没有进行upsert操作则为nil。 md5:681ec03a43493d1c
}

UpdateResult是从UpdateOne,UpdateMany和ReplaceOne操作返回的结果类型。 md5:fb4b146a87ac30bf

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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