first commit

This commit is contained in:
2022-02-23 16:59:45 +08:00
commit 32b8997441
52 changed files with 15078 additions and 0 deletions

12
builder/index.go Normal file
View File

@@ -0,0 +1,12 @@
package builder
// Add 添加一个索引项
//func (ib *IndexBuilder) Add(key string, sort mdbc.KeySort) *IndexBuilder {
// ib.d = append(ib.d, bson.E{Key: key, Value: sort})
// return ib
//}
// Build 构建完整索引
//func (ib *IndexBuilder) Build() bson.D {
// return ib.d
//}

63
builder/pipeline.go Normal file
View File

@@ -0,0 +1,63 @@
package builder
import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
)
// AddFields do something
func (b *PipelineBuilder) AddFields(filter bson.M) *PipelineBuilder {
b.pipeline = append(b.pipeline, bson.D{{"$addFields", filter}})
return b
}
// Match 过滤匹配
func (b *PipelineBuilder) Match(filter bson.M) *PipelineBuilder {
b.pipeline = append(b.pipeline, bson.D{{"$match", filter}})
return b
}
// Sort 排序
func (b *PipelineBuilder) Sort(filter bson.M) *PipelineBuilder {
b.pipeline = append(b.pipeline, bson.D{{"$sort", filter}})
return b
}
// Group 分组
func (b *PipelineBuilder) Group(filter bson.M) *PipelineBuilder {
b.pipeline = append(b.pipeline, bson.D{{"$group", filter}})
return b
}
// Project do something
func (b *PipelineBuilder) Project(filter bson.M) *PipelineBuilder {
b.pipeline = append(b.pipeline, bson.D{{"$project", filter}})
return b
}
// Limit do something
func (b *PipelineBuilder) Limit(limit int) *PipelineBuilder {
b.pipeline = append(b.pipeline, bson.D{{"$limit", limit}})
return b
}
// Skip do something
func (b *PipelineBuilder) Skip(limit int) *PipelineBuilder {
b.pipeline = append(b.pipeline, bson.D{{"$skip", limit}})
return b
}
// Count 统计
func (b *PipelineBuilder) Count(fieldName string) *PipelineBuilder {
b.pipeline = append(b.pipeline, bson.D{{"$count", fieldName}})
return b
}
func (b *PipelineBuilder) Other(d ...bson.D) *PipelineBuilder {
b.pipeline = append(b.pipeline, d...)
return b
}
func (b *PipelineBuilder) Build() mongo.Pipeline {
return b.pipeline
}

19
builder/query.go Normal file
View File

@@ -0,0 +1,19 @@
package builder
import "go.mongodb.org/mongo-driver/bson"
// Add 添加一个默认的隐式and操作
func (qb *QueryBuilder) Add(opName string, value interface{}) *QueryBuilder {
qb.q[opName] = value
return qb
}
// Or 添加一个 or 操作
func (qb *QueryBuilder) Or(filters ...bson.M) *QueryBuilder {
if qb.q["$or"] == nil {
return qb
}
return qb
}

40
builder/type.go Normal file
View File

@@ -0,0 +1,40 @@
// Package builder 用来快速构建 aggregate 查询
package builder
import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
)
type Builder struct{}
type PipelineBuilder struct {
pipeline mongo.Pipeline
}
type IndexBuilder struct {
d bson.D
}
type QueryBuilder struct {
q bson.M
}
func NewBuilder() *Builder {
return &Builder{}
}
// Pipeline 构建器
func (b *Builder) Pipeline() *PipelineBuilder {
return &PipelineBuilder{pipeline: mongo.Pipeline{}}
}
// Index key构建器
func (b *Builder) Index() *IndexBuilder {
return &IndexBuilder{}
}
// Query 查询构建器
func (b *Builder) Query() *QueryBuilder {
return &QueryBuilder{}
}