Documentation ¶
Overview ¶
badgerhold 是一个基于 Badger DB 之上的索引和查询层。它的目的是提供一种简单、持久的 Go 类型存储和检索方法。Badger DB 是一个嵌入式键值存储,而 badgerhold 提供了一个更高级的接口,适用于 Badger 的常见用例。
Go 类型 ¶
badgerhold 直接处理 Go 类型。插入数据时,您可以直接传递结构体。当查询数据时,您需要传递一个指向要返回类型的切片的指针。默认情况下,使用 Gob 编码。 您可以在同一个 DB 文件中存储多种不同的类型,并且它们(及其索引)会被分别存储。
示例代码展示了如何插入数据和查询数据:
err := store.Insert(1234, Item{ Name: "Test Name", Created: time.Now(), }) var result []Item err := store.Find(&result, query)
索引 ¶
badgerhold 会自动为结构体中标记为 badgerholdIndex 的字段创建索引。例如:
type Item struct { ID int Name string Category string `badgerholdIndex:"Category"` Created time.Time }
查询时,第一个指定的字段(如果存在索引)将用作索引。
查询 ¶
查询是对一组字段应用的链式条件。例如:
badgerhold.Where("Name").Eq("John Doe").And("DOB").Lt(time.Now())
这个查询语句表示查找 Name 为 "John Doe" 且 DOB 小于当前时间的记录。
总结 ¶
badgerhold 提供了一种高效且易于使用的方法来在 Badger DB 之上进行复杂的查询和数据操作,并自动处理了索引的创建和使用。
Example ¶
Example 函数展示了如何使用 badgerhold 插入数据并查询最近一个小时内创建的指定类别的项。
// 目的:提供项目功能的示例测试,通常用于生成文档中的示例代码。 // 测试内容:展示如何使用 badgerhold 的基本功能,包括插入、查询、删除等操作。 package main import ( "fmt" "os" "time" "github.com/bpfs/defs/v2/badgerhold" logging "github.com/dep2p/log" "github.com/dgraph-io/badger/v4" ) var logger = logging.Logger("badgerhold_test") // Item 结构体表示一个项,其中包含 ID、Category(类别)和 Created(创建时间)。 // Category 字段通过 `badgerholdIndex` 标签在 badgerhold 中建立索引。 type Item struct { ID int // 项的唯一标识符 Category string `badgerholdIndex:"Category"` // 项的类别,使用 badgerholdIndex 建立索引 Created time.Time // 项的创建时间 } // Example 函数展示了如何使用 badgerhold 插入数据并查询最近一个小时内创建的指定类别的项。 func main() { // 定义一组待插入的数据 data := []Item{ { ID: 0, Category: "blue", // 设置类别为 blue Created: time.Now().Add(-4 * time.Hour), // 设置创建时间为当前时间的 4 小时前 }, { ID: 1, Category: "red", // 设置类别为 red Created: time.Now().Add(-3 * time.Hour), // 设置创建时间为当前时间的 3 小时前 }, { ID: 2, Category: "blue", // 设置类别为 blue Created: time.Now().Add(-2 * time.Hour), // 设置创建时间为当前时间的 2 小时前 }, { ID: 3, Category: "blue", // 设置类别为 blue Created: time.Now().Add(-20 * time.Minute), // 设置创建时间为当前时间的 20 分钟前 }, } // 创建一个临时目录,用于存储 badgerhold 数据库文件 dir := tempdir() defer os.RemoveAll(dir) // 在函数结束时删除该临时目录 // 配置 badgerhold 数据库选项 options := badgerhold.DefaultOptions options.Dir = dir // 设置数据库目录 options.ValueDir = dir // 设置值存储目录 store, err := badgerhold.Open(options) // 打开 badgerhold 数据库 defer store.Close() // 在函数结束时关闭数据库 if err != nil { // 如果打开数据库失败,处理错误 logger.Fatal(err) } // 在一个事务中插入数据 err = store.Badger().Update(func(tx *badger.Txn) error { for i := range data { // 遍历每个数据项 err := store.TxInsert(tx, data[i].ID, data[i]) // 将数据插入数据库 if err != nil { return err // 如果插入失败,返回错误 } } return nil // 事务成功完成,返回 nil }) if err != nil { // 如果插入数据失败,处理错误 logger.Fatal(err) } // 查询最近一个小时内创建的类别为 "blue" 的所有项 var result []Item err = store.Find(&result, badgerhold.Where("Category").Eq("blue").And("Created").Ge(time.Now().UTC().Add(-1*time.Hour))) if err != nil { // 如果查询失败,处理错误 logger.Fatal(err) } // 输出查询到的第一个结果的 ID fmt.Println("1", result[0].ID) }
Output: 3
Index ¶
- Constants
- Variables
- func DefaultDecode(data []byte, value interface{}) error
- func DefaultEncode(value interface{}) ([]byte, error)
- func NextSequence() interface{}
- func Slice(value interface{}) []interface{}
- type AggregateResult
- func (a *AggregateResult) Avg(field string) float64
- func (a *AggregateResult) Count() uint64
- func (a *AggregateResult) Group(result ...interface{})
- func (a *AggregateResult) Max(field string, result interface{})
- func (a *AggregateResult) Min(field string, result interface{})
- func (a *AggregateResult) Reduction(result interface{})
- func (a *AggregateResult) Sort(field string)
- func (a *AggregateResult) Sum(field string) float64
- type Comparer
- type Criterion
- func (c *Criterion) Contains(value interface{}) *Query
- func (c *Criterion) ContainsAll(values ...interface{}) *Query
- func (c *Criterion) ContainsAny(values ...interface{}) *Query
- func (c *Criterion) Eq(value interface{}) *Query
- func (c *Criterion) Ge(value interface{}) *Query
- func (c *Criterion) Gt(value interface{}) *Query
- func (c *Criterion) HasKey(value interface{}) *Query
- func (c *Criterion) HasPrefix(prefix string) *Query
- func (c *Criterion) HasSuffix(suffix string) *Query
- func (c *Criterion) In(values ...interface{}) *Query
- func (c *Criterion) IsNil() *Query
- func (c *Criterion) Le(value interface{}) *Query
- func (c *Criterion) Lt(value interface{}) *Query
- func (c *Criterion) MatchFunc(match MatchFunc) *Query
- func (c *Criterion) Ne(value interface{}) *Query
- func (c *Criterion) RegExp(expression *regexp.Regexp) *Query
- func (c *Criterion) String() string
- type DecodeFunc
- type EncodeFunc
- type ErrTypeMismatch
- type Field
- type Index
- type KeyList
- type MatchFunc
- type Options
- type Query
- func (q *Query) And(field string) *Criterion
- func (q *Query) Index(indexName string) *Query
- func (q *Query) IsEmpty() bool
- func (q *Query) Limit(amount int) *Query
- func (q *Query) Matches(s *Store, data interface{}) (bool, error)
- func (q *Query) Or(query *Query) *Query
- func (q *Query) Reverse() *Query
- func (q *Query) Skip(amount int) *Query
- func (q *Query) SortBy(fields ...string) *Query
- func (q *Query) String() string
- type RecordAccess
- type Store
- func (s *Store) Badger() *badger.DB
- func (s *Store) Close() error
- func (s *Store) Count(dataType interface{}, query *Query) (uint64, error)
- func (s *Store) Delete(key, dataType interface{}) error
- func (s *Store) DeleteMatching(dataType interface{}, query *Query) error
- func (s *Store) Find(result interface{}, query *Query) error
- func (s *Store) FindAggregate(dataType interface{}, query *Query, groupBy ...string) ([]*AggregateResult, error)
- func (s *Store) FindOne(result interface{}, query *Query) error
- func (s *Store) ForEach(query *Query, fn interface{}) error
- func (s *Store) Get(key, result interface{}) error
- func (s *Store) Insert(key, data interface{}) error
- func (s *Store) TxCount(tx *badger.Txn, dataType interface{}, query *Query) (uint64, error)
- func (s *Store) TxDelete(tx *badger.Txn, key, dataType interface{}) error
- func (s *Store) TxDeleteMatching(tx *badger.Txn, dataType interface{}, query *Query) error
- func (s *Store) TxFind(tx *badger.Txn, result interface{}, query *Query) error
- func (s *Store) TxFindAggregate(tx *badger.Txn, dataType interface{}, query *Query, groupBy ...string) ([]*AggregateResult, error)
- func (s *Store) TxFindOne(tx *badger.Txn, result interface{}, query *Query) error
- func (s *Store) TxForEach(tx *badger.Txn, query *Query, fn interface{}) error
- func (s *Store) TxGet(tx *badger.Txn, key, result interface{}) error
- func (s *Store) TxInsert(tx *badger.Txn, key, data interface{}) error
- func (s *Store) TxUpdate(tx *badger.Txn, key interface{}, data interface{}) error
- func (s *Store) TxUpdateMatching(tx *badger.Txn, dataType interface{}, query *Query, ...) error
- func (s *Store) TxUpsert(tx *badger.Txn, key interface{}, data interface{}) error
- func (s *Store) Update(key interface{}, data interface{}) error
- func (s *Store) UpdateMatching(dataType interface{}, query *Query, update func(record interface{}) error) error
- func (s *Store) Upsert(key interface{}, data interface{}) error
- type Storer
Examples ¶
Constants ¶
const ( // BadgerHoldIndexTag 是用于将字段定义为可索引的 badgerhold 结构体标签 BadgerHoldIndexTag = "badgerholdIndex" // BadgerholdKeyTag 是用于将字段定义为键以用于 Find 查询的结构体标签 BadgerholdKeyTag = "badgerholdKey" )
const Key = ""
Key 是用于在 badgerhold 中指定查询键的简写,只返回空字符串 例如:Where(badgerhold.Key).Eq("testkey")
Variables ¶
var DefaultOptions = Options{ Options: badger.DefaultOptions(""), Encoder: DefaultEncode, Decoder: DefaultDecode, SequenceBandwith: 100, }
DefaultOptions 是一组用于打开 BadgerHold 数据库的默认选项 包括 Badger 自己的默认选项
var ErrKeyExists = errors.New("该类型的键已存在于badgerhold中")
ErrKeyExists 是在插入已存在的键时返回的错误
var ErrNotFound = errors.New("未找到该键对应的数据")
ErrNotFound 在未找到给定键的数据时返回
var ErrUniqueExists = errors.New("由于字段的唯一性约束,无法写入该值")
ErrUniqueExists 是在插入违反唯一性约束的值时抛出的错误
Functions ¶
func DefaultDecode ¶
DefaultDecode 是 badgerhold 的默认解码函数,使用 Gob 解码 参数:
- data: []byte 类型,表示要解码的字节数据
- value: interface{} 类型,表示要解码到的目标值
返回值:
- error: 如果解码过程中出现错误,则返回错误信息
func DefaultEncode ¶
DefaultEncode 是 badgerhold 的默认编码函数,使用 Gob 编码 参数:
- value: interface{} 类型,表示要编码的值
返回值:
- []byte: 编码后的字节切片
- error: 如果编码过程中出现错误,则返回错误信息
func NextSequence ¶
func NextSequence() interface{}
NextSequence 用于创建插入时的顺序键 插入时使用 uint64 作为键 store.Insert(badgerhold.NextSequence(), data)
Types ¶
type AggregateResult ¶
type AggregateResult struct {
// contains filtered or unexported fields
}
AggregateResult 允许您访问聚合查询的结果
func (*AggregateResult) Avg ¶
func (a *AggregateResult) Avg(field string) float64
Avg 返回聚合分组的平均值 如果字段不能转换为 float64,则抛出异常 参数:
- field: string 类型,表示用于计算平均值的字段名称
返回值:
- float64: 计算出的平均值
func (*AggregateResult) Count ¶
func (a *AggregateResult) Count() uint64
Count 返回聚合分组中的记录数量 返回值:
- uint64: 记录的数量
func (*AggregateResult) Group ¶
func (a *AggregateResult) Group(result ...interface{})
Group 返回在查询中按字段分组的值 参数:
- result: interface{} 类型的变长参数,表示用于接收分组结果的变量,必须为指针类型
func (*AggregateResult) Max ¶
func (a *AggregateResult) Max(field string, result interface{})
Max 返回聚合分组的最大值,使用 Comparer 接口 参数:
- field: string 类型,表示用于获取最大值的字段名称
- result: interface{} 类型,表示用于接收最大值的变量,必须为指针类型
func (*AggregateResult) Min ¶
func (a *AggregateResult) Min(field string, result interface{})
Min 返回聚合分组的最小值,使用 Comparer 接口 参数:
- field: string 类型,表示用于获取最小值的字段名称
- result: interface{} 类型,表示用于接收最小值的变量,必须为指针类型
func (*AggregateResult) Reduction ¶
func (a *AggregateResult) Reduction(result interface{})
Reduction 返回属于 AggregateResult 分组的记录集合 参数:
- result: interface{} 类型的参数,表示用于接收聚合结果的切片变量,必须为切片指针类型
func (*AggregateResult) Sort ¶
func (a *AggregateResult) Sort(field string)
Sort 按传入的字段对聚合结果进行升序排序 Sort 方法会自动在调用 Min/Max 函数时被调用,以获取最小值和最大值 参数:
- field: string 类型,表示用于排序的字段名称,必须以大写字母开头
func (*AggregateResult) Sum ¶
func (a *AggregateResult) Sum(field string) float64
Sum 返回聚合分组的总和 如果字段不能转换为 float64,则抛出异常 参数:
- field: string 类型,表示用于计算总和的字段名称
返回值:
- float64: 计算出的总和
type Comparer ¶
Comparer 接口用于将类型与存储中的编码值进行比较。如果当前值等于 other,结果应该是 0; 如果当前值小于 other,则结果应为 -1;如果当前值大于 other,则结果应为 +1。 如果结构体中的字段没有指定 comparer,则使用默认比较(转换为字符串并比较)。 该接口已经为标准 Go 类型以及更复杂的类型(如 time 和 big)进行了处理。 如果类型无法比较,则返回错误。 实现此接口的具体类型将始终以非指针形式传递。
type Criterion ¶
type Criterion struct {
// contains filtered or unexported fields
}
Criterion 是一个操作符和一个值,字段需要与之匹配
func Where ¶
Where 开始一个查询,用于指定 badgerhold 中对象需要匹配的条件 例如: s.Find(badgerhold.Where("FieldName").Eq(value).And("AnotherField").Lt(AnotherValue). Or(badgerhold.Where("FieldName").Eq(anotherValue) 由于 Gobs 只编码导出的字段,如果传入的字段名称首字母为小写,则会触发 panic 参数:
- field: string 类型,表示字段名称
返回值:
- *Criterion: 返回创建的条件
func (*Criterion) Contains ¶
Contains 测试当前字段是否为包含传入值的切片 参数:
- value: interface{} 类型,表示要检查的值
返回值:
- *Query: 返回更新后的查询对象
func (*Criterion) ContainsAll ¶
ContainsAll 测试当前字段是否为包含所有传入值的切片。如果切片中不包含任何一个值,则不匹配 参数:
- values: 可变参数,表示要检查的多个值
返回值:
- *Query: 返回更新后的查询对象
func (*Criterion) ContainsAny ¶
ContainsAny 测试当前字段是否为包含任意一个传入值的切片。如果切片中包含任何一个值,则匹配 参数:
- values: 可变参数,表示要检查的多个值
返回值:
- *Query: 返回更新后的查询对象
func (*Criterion) Ge ¶
Ge 测试当前字段是否大于或等于传入的值 参数:
- value: interface{} 类型,表示要比较的值
返回值:
- *Query: 返回更新后的查询对象
func (*Criterion) HasKey ¶
HasKey 测试字段是否具有与传入值匹配的 map 键 参数:
- value: interface{} 类型,表示要检查的键值
返回值:
- *Query: 返回更新后的查询对象
func (*Criterion) HasPrefix ¶
HasPrefix 测试字段是否以提供的字符串作为前缀 参数:
- prefix: string 类型,表示要匹配的前缀
返回值:
- *Query: 返回更新后的查询对象
func (*Criterion) HasSuffix ¶
HasSuffix 测试字段是否以提供的字符串作为后缀 参数:
- suffix: string 类型,表示要匹配的后缀
返回值:
- *Query: 返回更新后的查询对象
func (*Criterion) Le ¶
Le 测试当前字段是否小于或等于传入的值 参数:
- value: interface{} 类型,表示要比较的值
返回值:
- *Query: 返回更新后的查询对象
func (*Criterion) MatchFunc ¶
MatchFunc 测试一个字段是否与传入的函数匹配 参数:
- match: MatchFunc 类型,表示要匹配的函数
返回值:
- *Query: 返回更新后的查询对象
type DecodeFunc ¶
DecodeFunc 是一个用于从字节解码值的函数类型
type EncodeFunc ¶
EncodeFunc 是一个用于将值编码为字节的函数类型
type ErrTypeMismatch ¶
type ErrTypeMismatch struct { Value interface{} // Value 表示其中一个无法比较的值 Other interface{} // Other 表示另一个无法比较的值 }
ErrTypeMismatch 是在两个类型无法进行比较时抛出的错误类型
func (*ErrTypeMismatch) Error ¶
func (e *ErrTypeMismatch) Error() string
Error 返回错误的描述信息 返回值:
- string: 描述无法比较的两个值及其类型的字符串
type Index ¶
type Index struct { IndexFunc func(name string, value interface{}) ([]byte, error) // IndexFunc 返回传入值的索引编码字节 Unique bool // Unique 指示索引是否唯一 }
Index 是一个结构体,包含一个返回可索引的编码字节的函数,以及一个标志来指示索引是否唯一
type MatchFunc ¶
type MatchFunc func(ra *RecordAccess) (bool, error)
MatchFunc 是一个用于在查询中测试任意匹配值的函数类型
type Options ¶
type Options struct { Encoder EncodeFunc // 用于编码的函数 Decoder DecodeFunc // 用于解码的函数 SequenceBandwith uint64 // 序列带宽,用于生成序列键 badger.Options // Badger 的配置选项 }
Options 允许设置不同于默认值的选项 例如,编码和解码函数,默认为 Gob
type Query ¶
type Query struct {
// contains filtered or unexported fields
}
Query 是一系列条件的集合,badgerhold 中的对象需要匹配这些条件才能被返回 空查询会匹配所有记录
func (*Query) Limit ¶
Limit 设置查询最多返回的记录数量。多次设置 Limit 或将其设置为负值会触发 panic 参数:
- amount: int 类型,表示最大返回记录数量
返回值:
- *Query: 返回更新后的查询对象
func (*Query) Matches ¶
Matches 返回提供的数据是否与查询匹配。 将匹配所有字段条件,包括嵌套的 OR 查询,但忽略限制、跳过、排序顺序等。 参数:
- s: *Store 类型,表示要查询的存储
- data: interface{} 类型,表示要检查的数据
返回值:
- bool: 如果匹配,返回 true,否则返回 false
- error: 如果匹配过程中出现错误,返回错误信息
func (*Query) Or ¶
Or 创建另一个单独的查询,并将其与查询中的其他结果合并 如果传入的查询包含 limit 或 skip 值,则 Or 会触发 panic,因为它们只允许在顶层查询中使用 参数:
- query: *Query 类型,表示要合并的查询
返回值:
- *Query: 返回更新后的查询对象
func (*Query) Skip ¶
Skip 跳过与查询条件匹配的记录,并不在结果集中返回这些记录。设置 skip 多次或为负数会触发 panic 参数:
- amount: int 类型,表示要跳过的记录数量
返回值:
- *Query: 返回更新后的查询对象
type RecordAccess ¶
type RecordAccess struct {
// contains filtered or unexported fields
}
RecordAccess 允许在 MatchFunc 中访问当前记录、字段,或运行子查询
func (*RecordAccess) Field ¶
func (r *RecordAccess) Field() interface{}
Field 返回正在查询的当前字段 返回值:
- interface{}: 当前字段的值
func (*RecordAccess) Record ¶
func (r *RecordAccess) Record() interface{}
Record 返回 badgerhold 中给定行的完整记录 返回值:
- interface{}: 当前记录的值
func (*RecordAccess) SubAggregateQuery ¶
func (r *RecordAccess) SubAggregateQuery(query *Query, groupBy ...string) ([]*AggregateResult, error)
SubAggregateQuery 允许在父查询的每条记录上运行另一个聚合查询,使用相同的事务 参数:
- query: *Query 类型,表示要运行的聚合子查询
- groupBy: 可变参数,表示分组字段
返回值:
- []*AggregateResult: 返回聚合查询的结果集合
- error: 如果聚合查询过程中发生错误,返回错误信息
func (*RecordAccess) SubQuery ¶
func (r *RecordAccess) SubQuery(result interface{}, query *Query) error
SubQuery 允许在父查询的每条记录上运行另一个查询,使用相同的事务 参数:
- result: interface{} 类型,用于存储子查询结果的变量
- query: *Query 类型,表示要运行的子查询
返回值:
- error: 如果子查询过程中发生错误,返回错误信息
type Store ¶
type Store struct {
// contains filtered or unexported fields
}
Store 是 badgerhold 的包装器,封装了一个 Badger 数据库
func Open ¶
Open 打开或创建一个 BadgerHold 文件 参数:
- options: Options 类型,表示要使用的选项
返回值:
- *Store: 返回打开的 Store 实例
- error: 如果打开过程中出现错误,则返回错误信息
func (*Store) Badger ¶
func (s *Store) Badger() *badger.DB
Badger 返回 BadgerHold 所基于的底层 Badger 数据库 返回值:
- *badger.DB: 返回底层的 Badger 数据库实例
func (*Store) Count ¶
Count 返回当前数据类型的记录数量 参数:
- dataType: interface{} 类型,表示要统计记录数量的数据类型
- query: *Query 类型,表示查询条件
返回值:
- uint64: 当前数据类型的记录数量
- error: 如果统计过程中出现错误,则返回错误信息
func (*Store) Delete ¶
Delete 从 badgerhold 中删除一条记录,dataType 只需要是存储类型的一个示例,以便正确更新桶和索引 参数:
- key: interface{} 类型,表示要删除记录的键
- dataType: interface{} 类型,表示要删除记录的类型
返回值:
- error: 如果删除过程中出现错误,则返回错误信息
func (*Store) DeleteMatching ¶
DeleteMatching 删除所有与传入查询匹配的记录 参数:
- dataType: interface{} 类型,表示要删除记录的类型
- query: *Query 类型,表示查询条件
返回值:
- error: 如果删除过程中出现错误,则返回错误信息
func (*Store) Find ¶
Find 从 badgerhold 中检索符合传入查询的值集,result 必须是指向切片的指针。 查询结果将被追加到传入的 result 切片中,而不是清空传入的切片。 参数:
- result: interface{} 类型,表示存储检索结果的切片,必须为指针类型
- query: *Query 类型,表示查询条件
返回值:
- error: 如果检索过程中出现错误,则返回错误信息
func (*Store) FindAggregate ¶
func (s *Store) FindAggregate(dataType interface{}, query *Query, groupBy ...string) ([]*AggregateResult, error)
FindAggregate 返回传入查询的聚合分组 groupBy 是可选参数,用于指定分组字段 参数:
- dataType: interface{} 类型,表示查询的数据类型
- query: *Query 类型,表示要执行的查询
- groupBy: 变长字符串参数,表示分组的字段名称
返回值:
- []*AggregateResult: 包含聚合结果的切片
- error: 如果查询失败,返回错误信息
func (*Store) FindOne ¶
FindOne 返回单个记录,因此 result 不是切片,而是指向结构体的指针。 如果没有找到符合查询条件的记录,则返回 ErrNotFound 错误。 参数:
- result: interface{} 类型,表示存储检索结果的变量,必须为指向结构体的指针
- query: *Query 类型,表示查询条件
返回值:
- error: 如果未找到记录或检索过程中出现错误,则返回错误信息
func (*Store) ForEach ¶
ForEach 针对每个匹配查询条件的记录运行函数 fn 当处理大批量数据时非常有用,因为你不需要将整个结果集保存在内存中,类似于数据库游标 如果 fn 返回错误,将停止游标的迭代 参数:
- query: *Query 类型,表示查询条件
- fn: interface{} 类型,表示对每个记录执行的函数
返回值:
- error: 如果迭代过程中出现错误,则返回错误信息
func (*Store) Get ¶
Get 从 badgerhold 中检索一个值并将其存入 result。result 必须是指针 参数:
- key: interface{} 类型,表示要检索记录的键
- result: interface{} 类型,表示存储检索结果的变量,必须为指针类型
返回值:
- error: 如果检索过程中出现错误,则返回错误信息
func (*Store) Insert ¶
Insert 将传入的数据插入到 badgerhold 中 如果键已存在于 badgerhold 中,则返回 ErrKeyExists 错误 如果数据结构有一个字段标记为 `badgerholdKey`,并且该字段的类型与插入的键类型相同, 且数据结构是通过引用传递的,并且键字段当前设置为该类型的零值,则该字段将设置为插入键的值。 要与 badgerhold.NextSequence() 一起使用,请使用 `uint64` 类型的键字段。 参数:
- key: interface{} 类型,表示要插入记录的键
- data: interface{} 类型,表示要插入的数据
返回值:
- error: 如果插入过程中出现错误,则返回错误信息
func (*Store) TxCount ¶
TxCount 返回在指定事务内的当前数据类型的记录数量 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- dataType: interface{} 类型,表示要统计记录数量的数据类型
- query: *Query 类型,表示查询条件
返回值:
- uint64: 当前数据类型的记录数量
- error: 如果统计过程中出现错误,则返回错误信息
func (*Store) TxDelete ¶
TxDelete 与 Delete 方法相同,但允许用户指定自己的事务 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- key: interface{} 类型,表示要删除记录的键
- dataType: interface{} 类型,表示要删除记录的类型
返回值:
- error: 如果删除过程中出现错误,则返回错误信息
func (*Store) TxDeleteMatching ¶
TxDeleteMatching 与 DeleteMatching 方法相同,但允许用户指定自己的事务 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- dataType: interface{} 类型,表示要删除记录的类型
- query: *Query 类型,表示查询条件
返回值:
- error: 如果删除过程中出现错误,则返回错误信息
func (*Store) TxFind ¶
TxFind 允许用户传入自己的 badger 事务来从 badgerhold 中检索符合查询条件的一组值 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- result: interface{} 类型,表示存储检索结果的切片,必须为指针类型
- query: *Query 类型,表示查询条件
返回值:
- error: 如果检索过程中出现错误,则返回错误信息
func (*Store) TxFindAggregate ¶
func (s *Store) TxFindAggregate(tx *badger.Txn, dataType interface{}, query *Query, groupBy ...string) ([]*AggregateResult, error)
TxFindAggregate 与 FindAggregate 类似,但您可以指定自己的事务 groupBy 是可选参数,用于指定分组字段 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- dataType: interface{} 类型,表示查询的数据类型
- query: *Query 类型,表示要执行的查询
- groupBy: 变长字符串参数,表示分组的字段名称
返回值:
- []*AggregateResult: 包含聚合结果的切片
- error: 如果查询失败,返回错误信息
func (*Store) TxFindOne ¶
TxFindOne 允许用户传入自己的 badger 事务来从 badgerhold 中检索单个记录 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- result: interface{} 类型,表示存储检索结果的变量,必须为指向结构体的指针
- query: *Query 类型,表示查询条件
返回值:
- error: 如果未找到记录或检索过程中出现错误,则返回错误信息
func (*Store) TxForEach ¶
TxForEach 与 ForEach 方法相同,但允许用户指定自己的事务 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- query: *Query 类型,表示查询条件
- fn: interface{} 类型,表示对每个记录执行的函数
返回值:
- error: 如果迭代过程中出现错误,则返回错误信息
func (*Store) TxGet ¶
TxGet 允许用户传入自己的 badger 事务来从 badgerhold 中检索一个值,并将其存入 result 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- key: interface{} 类型,表示要检索记录的键
- result: interface{} 类型,表示存储检索结果的变量,必须为指针类型
返回值:
- error: 如果检索过程中出现错误,则返回错误信息
func (*Store) TxInsert ¶
TxInsert 与 Insert 方法相同,但允许用户指定自己的事务 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- key: interface{} 类型,表示要插入记录的键
- data: interface{} 类型,表示要插入的数据
返回值:
- error: 如果插入过程中出现错误,则返回错误信息
func (*Store) TxUpdate ¶
TxUpdate 与 Update 方法相同,但允许用户指定自己的事务 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- key: interface{} 类型,表示要更新记录的键
- data: interface{} 类型,表示要更新的数据
返回值:
- error: 如果更新过程中出现错误,则返回错误信息
func (*Store) TxUpdateMatching ¶
func (s *Store) TxUpdateMatching(tx *badger.Txn, dataType interface{}, query *Query, update func(record interface{}) error) error
TxUpdateMatching 与 UpdateMatching 方法相同,但允许用户指定自己的事务 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- dataType: interface{} 类型,表示要更新的数据类型
- query: *Query 类型,表示查询条件
- update: func(record interface{}) error 类型,表示更新函数
返回值:
- error: 如果更新过程中出现错误,则返回错误信息
func (*Store) TxUpsert ¶
TxUpsert 与 Upsert 方法相同,但允许用户指定自己的事务 参数:
- tx: *badger.Txn 类型,表示要使用的事务
- key: interface{} 类型,表示要插入或更新记录的键
- data: interface{} 类型,表示要插入或更新的数据
返回值:
- error: 如果插入或更新过程中出现错误,则返回错误信息
func (*Store) Update ¶
Update 更新 badgerhold 中的现有记录 如果键在存储中不存在,则返回 ErrNotFound 错误 参数:
- key: interface{} 类型,表示要更新记录的键
- data: interface{} 类型,表示要更新的数据
返回值:
- error: 如果更新过程中出现错误,则返回错误信息
func (*Store) UpdateMatching ¶
func (s *Store) UpdateMatching(dataType interface{}, query *Query, update func(record interface{}) error) error
UpdateMatching 对匹配查询条件的每个记录运行更新函数 注意,更新函数中的记录类型必须是指针 参数:
- dataType: interface{} 类型,表示要更新的数据类型
- query: *Query 类型,表示查询条件
- update: func(record interface{}) error 类型,表示更新函数
返回值:
- error: 如果更新过程中出现错误,则返回错误信息