mdbc/builder/pipeline.go
2022-02-23 16:59:45 +08:00

64 lines
1.5 KiB
Go

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
}