/
operation.go
68 lines (57 loc) · 1.58 KB
/
operation.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package pipe
import (
"github.com/qianwj/typed/mongo/model"
"github.com/qianwj/typed/mongo/model/aggregate"
"github.com/qianwj/typed/mongo/model/filters"
"github.com/qianwj/typed/mongo/model/sorts"
"github.com/qianwj/typed/mongo/operator"
"go.mongodb.org/mongo-driver/bson"
)
func (p *Pipeline) Count(target string) *Pipeline {
p.put(operator.Count, target)
return p
}
func (p *Pipeline) Documents(docs []any) *Pipeline {
p.put(operator.Documents, docs)
return p
}
func (p *Pipeline) GraphLookup(join *aggregate.GraphLookup) *Pipeline {
p.put(operator.Lookup, join.Marshal())
return p
}
func (p *Pipeline) Group(id groupId, fields ...model.Pair[bson.M]) *Pipeline {
val := bson.D{{Key: "_id", Value: id}}
for _, field := range fields {
val = append(val, bson.E{Key: field.Key, Value: field.Value})
}
p.put(operator.Group, val)
return p
}
func (p *Pipeline) Limit(value int64) *Pipeline {
p.put(operator.Limit, value)
return p
}
func (p *Pipeline) Lookup(join *aggregate.Lookup) *Pipeline {
p.put(operator.Lookup, join.Marshal())
return p
}
func (p *Pipeline) Match(match *filters.Filter) *Pipeline {
p.put(operator.Match, match.Marshal())
return p
}
func (p *Pipeline) Project(fields ...model.Pair[bool]) *Pipeline {
val := bson.D{}
for _, field := range fields {
val = append(val, bson.E{Key: field.Key, Value: field.Value})
}
p.put(operator.Project, val)
return p
}
func (p *Pipeline) Sort(sort *sorts.SortOptions) *Pipeline {
p.put(operator.Sort, sort.Marshal())
return p
}
func (p *Pipeline) Unset(fields ...string) *Pipeline {
p.put(operator.Unset, fields)
return p
}