/
index.go
89 lines (74 loc) · 2.24 KB
/
index.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package mongox
import (
"context"
"go.mongodb.org/mongo-driver/mongo"
"github.com/w6d-io/x/errorx"
"github.com/w6d-io/x/logx"
)
// CreateIndexes create index based on input mongo index model
func (m *MongoDB) CreateIndexes(opt mongo.IndexModel) error {
log := logx.WithName(context.TODO(), "Create Index")
ctx, cancel := context.WithTimeout(context.Background(), m.options.Timeout)
defer cancel()
if err := m.Connect(); err != nil {
return errorx.Wrap(err, "fail connect")
}
_, err := m.GetCollection().GetIndex().CreateOne(ctx, opt)
if err != nil {
log.Error(err, "create index err")
}
return err
}
// CreateManyIndexes create indexes based on input mongo index model array
func (m *MongoDB) CreateManyIndexes(opt []mongo.IndexModel) error {
log := logx.WithName(context.TODO(), "Create Index")
ctx, cancel := context.WithTimeout(context.Background(), m.options.Timeout)
defer cancel()
if err := m.Connect(); err != nil {
return errorx.Wrap(err, "fail connect")
}
_, err := m.GetCollection().GetIndex().CreateMany(ctx, opt)
if err != nil {
log.Error(err, "create index err")
}
return err
}
// ListIndexes list indexes
func (m *MongoDB) ListIndexes() ([]string, error) {
log := logx.WithName(context.TODO(), "List Index")
ctx, cancel := context.WithTimeout(context.Background(), m.options.Timeout)
defer cancel()
if err := m.Connect(); err != nil {
return nil, errorx.Wrap(err, "fail connect")
}
indexList, err := m.GetCollection().GetIndex().ListSpecifications(ctx)
if err != nil {
log.Error(err, "list index err")
return nil, err
}
indexes := make([]string, len(indexList))
for i, v := range indexList {
indexes[i] = v.Name
}
return indexes, nil
}
// DropIndex remove index
func (m *MongoDB) DropIndex(index string) error {
log := logx.WithName(context.TODO(), "Drop Index")
ctx, cancel := context.WithTimeout(context.Background(), m.options.Timeout)
defer cancel()
if err := m.Connect(); err != nil {
return errorx.Wrap(err, "fail connect")
}
_, err := m.GetCollection().GetIndex().DropOne(ctx, index)
if err != nil {
log.Error(err, "drop index err")
}
return err
}
// GetIndex return an IndexAPI from collection indexes
func (c *ClientCollection) GetIndex() IndexAPI {
return &ClientIndex{
c.Indexes(),
}
}