436e0af4
zhangqijia
reactor: dir; Ac...
|
1
|
package mongoproxy
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
"go.mongodb.org/mongo-driver/x/bsonx"
"pro2d/common"
"pro2d/common/logger"
"reflect"
"sort"
"strings"
"time"
)
func DB() *mongo.Database {
return mongoDatabase
}
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
23
|
func ConnectMongo(conf *common.MongoConf, ID int64) error {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
24
|
var uri string
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
25
|
if conf.User != "" {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
26
27
|
//uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/%s?w=majority", conf.User, conf.Password, conf.Host, conf.Port, conf.DBName)
uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/?w=majority", conf.User, conf.Password, conf.Host, conf.Port)
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
28
|
} else {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
29
30
31
32
|
//uri = fmt.Sprintf("mongodb://%s:%d/%s?w=majority", conf.Host, conf.Port, conf.DBName)
uri = fmt.Sprintf("mongodb://%s:%d/?w=majority", conf.Host, conf.Port)
}
// 设置连接超时时间
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
33
|
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(conf.TimeOut)*time.Second)
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
defer cancel()
// 通过传进来的uri连接相关的配置
o := options.Client().ApplyURI(uri)
// 设置最大连接数 - 默认是100 ,不设置就是最大 max 64
o.SetMaxPoolSize(uint64(conf.MaxNum))
// 发起链接
var err error
mongoClient, err = mongo.Connect(ctx, o)
if err != nil {
return err
}
// 判断服务是不是可用
if err = mongoClient.Ping(context.Background(), readpref.Primary()); err != nil {
return err
}
|
97bec184
zhangqijia
fix: 账号系统只有一个数据库。
|
50
51
52
53
54
|
if conf.DBName != "account" {
mongoDatabase = mongoClient.Database(fmt.Sprintf("%s_%d", conf.DBName, ID))
} else {
mongoDatabase = mongoClient.Database(conf.DBName)
}
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
55
56
57
|
return nil
}
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
58
|
func CloseMongo() {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
mongoClient.Disconnect(context.TODO())
}
func CreateTable(tb string) error {
colls, _ := DB().ListCollectionNames(context.TODO(), bson.D{})
pos := sort.SearchStrings(colls, tb)
if pos != len(colls) {
if tb == colls[pos] {
return DB().CreateCollection(context.TODO(), tb)
}
}
return DB().CreateCollection(context.TODO(), tb)
}
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
73
74
|
func FindOne(coll string, pri interface{}, schema interface{}) error {
r := mongoDatabase.Collection(coll).FindOne(context.TODO(), pri)
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
75
76
77
|
return r.Decode(schema)
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
78
|
func FindMany(coll string, key string, val interface{}, schema interface{}) error {
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
79
|
r, err := mongoDatabase.Collection(coll).Find(context.TODO(), bson.M{key: val})
|
8d983031
zhangqijia
loginReq uid -> t...
|
80
81
82
83
|
if err != nil {
return err
}
return r.All(context.TODO(), schema)
|
e172952c
zhangqijia
feat: email 系统搭建
|
84
85
86
87
88
89
90
91
|
}
func FindManyFilter(coll string, filter bson.D, opts *options.FindOptions, schema interface{}) error {
r, err := mongoDatabase.Collection(coll).Find(context.TODO(), filter, opts)
if err != nil {
return err
}
return r.All(context.TODO(), schema)
|
8d983031
zhangqijia
loginReq uid -> t...
|
92
93
|
}
|
c2791869
zhangqijia
fix: gm增加删除装备删除物品接口
|
94
95
96
97
98
99
|
func DelOne(coll string, key string, value interface{}) error {
filter := bson.D{{key, value}}
_, err := mongoDatabase.Collection(coll).DeleteOne(context.TODO(), filter, nil)
return err
}
|
f74e34e3
zhangqijia
fix: 批量删除装备
|
100
|
func DelMany(coll string, filter bson.D) error {
|
8db23cb6
zhangqijia
fix: 批量删除装备 mongo...
|
101
102
|
r, err := mongoDatabase.Collection(coll).DeleteMany(context.TODO(), filter, nil)
logger.Debug(r.DeletedCount)
|
f74e34e3
zhangqijia
fix: 批量删除装备
|
103
104
105
|
return err
}
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
106
|
func GetBsonD(key string, value interface{}) interface{} {
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
107
|
return bson.D{{key, value}}
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
108
109
|
}
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
110
|
func GetBsonM(key string, value interface{}) interface{} {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
111
112
113
|
return bson.M{key: value}
}
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
114
|
func GetSchemaType(schema interface{}) reflect.Type {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
s := reflect.TypeOf(schema)
if s.Kind() == reflect.Ptr {
s = reflect.TypeOf(schema).Elem()
}
return s
}
func GetCollName(schema interface{}) string {
return strings.ToLower(GetSchemaType(schema).Name())
}
func GetPriKey(schema interface{}) string {
s := GetSchemaType(schema)
var pri string
for i := 0; i < s.NumField(); i++ {
if s.Field(i).Tag.Get("pri") == "1" {
pri = strings.ToLower(s.Field(i).Name)
break
}
}
return pri
}
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
139
|
func FindIndex(schema interface{}) (string, []string) {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
s := GetSchemaType(schema)
var index []string
for i := 0; i < s.NumField(); i++ {
if s.Field(i).Tag.Get("index") != "" {
js := strings.Split(s.Field(i).Tag.Get("json"), ",")
if len(js) == 0 {
continue
}
index = append(index, js[0])
}
}
return strings.ToLower(s.Name()), index
}
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
155
|
func SetUnique(coll, key string) (string, error) {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
156
157
158
|
return DB().Collection(coll).Indexes().CreateOne(
context.TODO(),
mongo.IndexModel{
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
159
|
Keys: bsonx.Doc{{key, bsonx.Int32(1)}},
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
160
161
162
163
164
|
Options: options.Index().SetUnique(true),
},
)
}
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
165
|
func InitDoc(schema ...interface{}) {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
166
167
168
|
for _, s := range schema {
coll, keys := FindIndex(s)
CreateTable(coll)
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
169
|
for _, index := range keys {
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
170
171
172
173
174
175
176
177
178
179
|
logger.Debug("InitDoc collect: %v, createIndex: %s", coll, index)
res, err := SetUnique(coll, index)
if err != nil {
logger.Error("InitDoc unique: %s, err: %v", res, err)
continue
}
}
}
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
180
|
}
|