forked from rethinkdb/rethinkdb-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_query_aggregation_test.go
135 lines (116 loc) · 2.31 KB
/
example_query_aggregation_test.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package gorethink
import (
"fmt"
)
// Group games by player.
func ExampleTerm_Group() {
cur, err := DB("examples").Table("games").Group("player").Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []interface{}
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}
// Group games by the index type.
func ExampleTerm_GroupByIndex() {
cur, err := DB("examples").Table("games").GroupByIndex("type").Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []interface{}
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}
// Suppose that the table games2 has the following data:
//
// [
// { id: 1, matches: {'a': [1, 2, 3], 'b': [4, 5, 6]} },
// { id: 2, matches: {'b': [100], 'c': [7, 8, 9]} },
// { id: 3, matches: {'a': [10, 20], 'c': [70, 80]} }
// ]
// Using MultiGroup we can group data by match A, B or C.
func ExampleTerm_MultiGroup() {
cur, err := DB("examples").Table("games2").MultiGroup(Row.Field("matches").Keys()).Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []interface{}
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}
// Ungrouping grouped data.
func ExampleTerm_Ungroup() {
cur, err := DB("examples").Table("games").
Group("player").
Max("points").Field("points").
Ungroup().
Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []interface{}
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}
// Return the number of documents in the table posts.
func ExampleTerm_Reduce() {
cur, err := DB("examples").Table("posts").
Map(func(doc Term) interface{} {
return 1
}).
Reduce(func(left, right Term) interface{} {
return left.Add(right)
}).
Run(session)
if err != nil {
fmt.Print(err)
return
}
var res int
err = cur.One(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}
// Concatenate words from a list.
func ExampleTerm_Fold() {
cur, err := Expr([]string{"a", "b", "c"}).Fold("", func(acc, word Term) Term {
return acc.Add(Branch(acc.Eq(""), "", ", ")).Add(word)
}).Run(session)
if err != nil {
fmt.Print(err)
return
}
var res string
err = cur.One(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
// Output:
// a, b, c
}