98b0736d
zhangqijia
添加定时器, 检查心跳
|
1
2
3
4
5
6
7
8
|
package db
import (
"reflect"
"strings"
)
type Schema struct {
|
33ea26ab
zhangqijia
使用schema封装mongo
|
9
10
11
12
13
|
mgo *MgoColl
reflectValue *reflect.Value
reflectType reflect.Type
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
14
15
16
17
|
pri interface{}
schema interface{}
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
18
19
|
func NewSchema(key string, schema interface{}) *Schema {
s := reflect.ValueOf(schema)
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
20
|
if s.Kind() == reflect.Ptr {
|
33ea26ab
zhangqijia
使用schema封装mongo
|
21
|
s = reflect.ValueOf(schema).Elem()
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
22
|
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
23
24
25
|
sch := &Schema{
reflectValue: &s,
reflectType: s.Type(),
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
26
27
|
schema: schema,
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
28
29
30
|
sch.mgo = NewMongoColl(sch)
sch.pri = GetBsonD(sch.getPriTag(), key)
return sch
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
31
32
|
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
33
34
|
func (s *Schema) GetSchemaType() reflect.Type {
return s.reflectType
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
35
36
|
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
37
|
func (s *Schema) GetCollName() string {
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
38
39
40
|
return strings.ToLower(s.GetSchemaType().Name())
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
41
|
func (s *Schema) getPriTag() string {
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
42
|
var pri string
|
33ea26ab
zhangqijia
使用schema封装mongo
|
43
44
45
|
for i := 0; i < s.reflectType.NumField(); i++ {
if s.reflectType.Field(i).Tag.Get("pri") == "1" {
pri = strings.ToLower(s.reflectType.Field(i).Name)
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
46
47
48
49
50
|
break
}
}
return pri
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
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
|
func (s *Schema) GetPri() interface{} {
return s.pri
}
func (s *Schema) GetSchema() interface{} {
return s.schema
}
func (s *Schema) Load() error {
return s.mgo.Load()
}
func (s *Schema) Create() error {
_, err := s.mgo.Create()
return err
}
func (s *Schema) UpdateProperty(key string, val interface{}) {
s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val))
s.mgo.UpdateProperty(key, val)
}
func (s *Schema) UpdateProperties(properties map[string]interface{}) {
for key, val := range properties {
s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val))
}
s.mgo.UpdateProperties(properties)
}
|