File: example_query_aggregation_test.go

package info (click to toggle)
golang-gopkg-rethinkdb-rethinkdb-go.v6 6.2.1-5
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,736 kB
  • sloc: python: 1,382; makefile: 16; sh: 9
file content (136 lines) | stat: -rw-r--r-- 2,426 bytes parent folder | download | duplicates (3)
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
136
package tests

import (
	"fmt"
	r "gopkg.in/rethinkdb/rethinkdb-go.v6"
)

// Group games by player.
func ExampleTerm_Group() {
	cur, err := r.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 := r.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 := r.DB("examples").Table("games2").MultiGroup(r.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 := r.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 := r.DB("examples").Table("posts").
		Map(func(doc r.Term) interface{} {
			return 1
		}).
		Reduce(func(left, right r.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 := r.Expr([]string{"a", "b", "c"}).Fold("", func(acc, word r.Term) r.Term {
		return acc.Add(r.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
}