Blame view

common/db/mongoproxy/mongo.go 2.6 KB
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
  
  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/x/bsonx"
  	"pro2d/common/components"
  	"sort"
  	"strings"
  )
  
  var (
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
16
  	mongoClient   *mongo.Client
765431a4   zhangqijia   增加schema接口, 抽象 mo...
17
18
19
20
21
22
23
24
  	mongoDatabase *mongo.Database
  )
  
  type MgoColl struct {
  	components.IDB
  	Schema components.ISchema
  
  	dbname string
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
25
  	coll   *mongo.Collection
765431a4   zhangqijia   增加schema接口, 抽象 mo...
26
27
28
29
30
  }
  
  func NewMongoColl(dbname string, schema components.ISchema) *MgoColl {
  	m := &MgoColl{
  		dbname: dbname,
436e0af4   zhangqijia   reactor: dir; Ac...
31
  		coll:   DB().Collection(dbname),
765431a4   zhangqijia   增加schema接口, 抽象 mo...
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  		Schema: schema,
  	}
  	return m
  }
  
  func (m *MgoColl) CreateTable() error {
  	colls, _ := DB().ListCollectionNames(context.TODO(), bson.D{})
  	pos := sort.SearchStrings(colls, m.dbname)
  	if pos != len(colls) {
  		if m.dbname == colls[pos] {
  			return DB().CreateCollection(context.TODO(), m.dbname)
  		}
  	}
  	return DB().CreateCollection(context.TODO(), m.dbname)
  }
  
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
48
  func (m *MgoColl) Create() (interface{}, error) {
765431a4   zhangqijia   增加schema接口, 抽象 mo...
49
50
51
  	return m.coll.InsertOne(context.TODO(), m.Schema.GetSchema())
  }
  
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
52
53
  func (m *MgoColl) Save() error {
  	_, err := m.coll.UpdateOne(context.TODO(), m.Schema.GetPri(), bson.D{{"$set", m.Schema.GetSchema()}})
8d983031   zhangqijia   loginReq uid -> t...
54
55
56
57
58
59
  	if err != nil {
  		return err
  	}
  	return nil
  }
  
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
60
  func (m *MgoColl) Load() error {
765431a4   zhangqijia   增加schema接口, 抽象 mo...
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  	r := m.coll.FindOne(context.TODO(), m.Schema.GetPri())
  	err := r.Decode(m.Schema.GetSchema())
  	if err != nil {
  		return err
  	}
  	return nil
  }
  
  // 查询单个
  func (m *MgoColl) FindOne() error {
  	singleResult := m.coll.FindOne(context.TODO(), m.Schema.GetPri())
  	return singleResult.Decode(m.Schema.GetSchema())
  }
  
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
75
  func (m *MgoColl) UpdateOne(filter interface{}, update interface{}) *mongo.UpdateResult {
765431a4   zhangqijia   增加schema接口, 抽象 mo...
76
77
78
79
80
81
82
83
84
85
86
87
88
  	res, err := m.coll.UpdateOne(context.TODO(), filter, bson.D{{"$set", update}})
  	if err != nil {
  		return nil
  	}
  	return res
  }
  
  func (m *MgoColl) UpdateProperty(key string, val interface{}) error {
  	_, err := m.coll.UpdateOne(context.TODO(), m.Schema.GetPri(), bson.D{{"$set", bson.M{strings.ToLower(key): val}}})
  	return err
  }
  
  func (m *MgoColl) UpdateProperties(properties map[string]interface{}) error {
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
89
  	_, err := m.coll.UpdateOne(context.TODO(), m.Schema.GetPri(), bson.D{{"$set", properties}})
765431a4   zhangqijia   增加schema接口, 抽象 mo...
90
91
92
93
  	return err
  }
  
  //索引
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
94
  func (m *MgoColl) SetUnique(key string) (string, error) {
765431a4   zhangqijia   增加schema接口, 抽象 mo...
95
96
97
  	return m.coll.Indexes().CreateOne(
  		context.Background(),
  		mongo.IndexModel{
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
98
  			Keys:    bsonx.Doc{{key, bsonx.Int32(1)}},
765431a4   zhangqijia   增加schema接口, 抽象 mo...
99
100
101
102
103
104
  			Options: options.Index().SetUnique(true),
  		},
  	)
  }
  
  func (m *MgoColl) Delete(key string, value interface{}) int64 {
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
105
  	filter := bson.D{{key, value}}
765431a4   zhangqijia   增加schema接口, 抽象 mo...
106
107
108
109
110
111
112
  	count, err := m.coll.DeleteOne(context.TODO(), filter, nil)
  	if err != nil {
  		fmt.Println(err)
  	}
  	return count.DeletedCount
  
  }