forked from vincent78/pholcus
/
update_all.go
52 lines (41 loc) · 1.16 KB
/
update_all.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
package mgo
import (
"fmt"
"gopkg.in/mgo.v2/bson"
"github.com/henrylee2cn/pholcus/common/pool"
)
// 更新全部匹配的数据
type UpdateAll struct {
Database string // 数据库
Collection string // 集合
Selector map[string]interface{} // 文档选择器
Change map[string]interface{} // 文档更新内容
}
func (self *UpdateAll) Exec(resultPtr interface{}) (err error) {
defer func() {
if re := recover(); re != nil {
err = fmt.Errorf("%v", re)
}
}()
resultPtr2 := resultPtr.(*map[string]interface{})
*resultPtr2 = map[string]interface{}{}
err = Call(func(src pool.Src) error {
c := src.(*MgoSrc).DB(self.Database).C(self.Collection)
if id, ok := self.Selector["_id"]; ok {
if idStr, ok2 := id.(string); !ok2 {
return fmt.Errorf("%v", "参数 _id 必须为 string 类型!")
} else {
self.Selector["_id"] = bson.ObjectIdHex(idStr)
}
}
info, err := c.UpdateAll(self.Selector, self.Change)
if err != nil {
return err
}
(*resultPtr2)["Updated"] = info.Updated
(*resultPtr2)["Removed"] = info.Removed
(*resultPtr2)["UpsertedId"] = info.UpsertedId
return err
})
return
}