-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_mongo3.go
61 lines (49 loc) · 1.03 KB
/
test_mongo3.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
package main
import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
// 样本管理集合 tb_ids_md5
type Result struct {
Count int `bson:"count"`
}
func main() {
host := "x.x.x.141:27017"
mongo, err := mgo.DialWithInfo(&mgo.DialInfo{
Addrs: []string{host},
Username: "root",
Password: "xxxx",
})
collection := mongo.DB("db_hello").C("tb_hello")
matchStage := bson.M{
"$match": bson.M{
"trust": bson.M{"$in": []interface{}{"2", "", nil}},
},
}
groupStage := bson.M{
"$group": bson.M{
"_id": "$md5",
},
}
groupStage2 := bson.M{
"$group": bson.M{
"_id": nil,
"count": bson.M{"$sum": 1},
},
}
projectStage := bson.M{
"$project": bson.M{
"_id": 0,
"count": 1,
},
}
pipe := collection.Pipe([]bson.M{matchStage, groupStage, groupStage2, projectStage})
var result Result
err = pipe.One(&result)
if err != nil {
fmt.Println("Failed to execute aggregation:", err)
return
}
fmt.Println("Count:", result.Count)
}