first commit
This commit is contained in:
12
builder/index.go
Normal file
12
builder/index.go
Normal 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
63
builder/pipeline.go
Normal 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
19
builder/query.go
Normal 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
40
builder/type.go
Normal 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{}
|
||||
}
|
||||
Reference in New Issue
Block a user