1
+ // EXAMPLE: js_home_json
2
+ // REMOVE_START
3
+ import assert from 'assert' ;
4
+ import { Console } from 'console' ;
5
+ // REMOVE_END
6
+ // STEP_START import
7
+ import {
8
+ createClient ,
9
+ SchemaFieldTypes ,
10
+ AggregateGroupByReducers ,
11
+ AggregateSteps ,
12
+ } from 'redis' ;
13
+ // STEP_END
14
+
15
+ // STEP_START connect
16
+ const client = await createClient ( ) ;
17
+ await client . connect ( ) ;
18
+ // STEP_END
19
+ // REMOVE_START
20
+ await client . ft . dropIndex ( 'idx:users' , { DD : true } ) ;
21
+ await client . del ( 'user:1' , 'user:2' , 'user:3' ) ;
22
+ // REMOVE_END
23
+
24
+ // STEP_START create_data
25
+ var user1 = {
26
+ name : "Paul John" ,
27
+
28
+ age : 42 ,
29
+ city : "London"
30
+ }
31
+
32
+ var user2 = {
33
+ name : "Eden Zamir" ,
34
+
35
+ age : 29 ,
36
+ city : "Tel Aviv"
37
+ }
38
+
39
+ var user3 = {
40
+ name : "Paul Zamir" ,
41
+
42
+ age : 35 ,
43
+ city : "Tel Aviv"
44
+ }
45
+ // STEP_END
46
+
47
+ // STEP_START make_index
48
+ await client . ft . create ( 'idx:users' , {
49
+ '$.name' : {
50
+ type : SchemaFieldTypes . TEXT ,
51
+ AS : 'name'
52
+ } ,
53
+ "$.city" : {
54
+ type : SchemaFieldTypes . TEXT ,
55
+ AS : 'city'
56
+ } ,
57
+ '$.age' : {
58
+ type : SchemaFieldTypes . NUMERIC ,
59
+ AS : 'age'
60
+ }
61
+ } , {
62
+ ON : 'JSON' ,
63
+ PREFIX : 'user:'
64
+ } ) ;
65
+ // STEP_END
66
+
67
+ // STEP_START add_data
68
+ var user1Added = await client . json . set ( 'user:1' , '$' , user1 ) ;
69
+ var user2Added = await client . json . set ( 'user:2' , '$' , user2 ) ;
70
+ var user3Added = await client . json . set ( 'user:3' , '$' , user3 ) ;
71
+ // STEP_END
72
+ // REMOVE_START
73
+ assert . equal ( 'OK' , user1Added ) ;
74
+ assert . equal ( 'OK' , user2Added ) ;
75
+ assert . equal ( 'OK' , user3Added ) ;
76
+ // REMOVE_END
77
+
78
+ // STEP_START query1
79
+ var findPaulResult = await client . ft . search ( 'idx:users' , 'Paul @age:[30 40]' ) ;
80
+
81
+ console . log ( findPaulResult . total ) ; // >>> 1
82
+
83
+ findPaulResult . documents . forEach ( doc => {
84
+ console . log ( `ID: ${ doc . id } , name: ${ doc . value . name } , age: ${ doc . value . age } ` ) ;
85
+ } ) ;
86
+ // >>> ID: user:3, name: Paul Zamir, age: 35
87
+ // STEP_END
88
+ // REMOVE_START
89
+ assert . strictEqual ( 1 , findPaulResult . total ) ;
90
+
91
+ var paulDoc = findPaulResult . documents [ 0 ] ;
92
+
93
+ assert . equal ( 'user:3' , paulDoc . id ) ;
94
+ // REMOVE_END
95
+
96
+ // STEP_START query2
97
+ var citiesResult = await client . ft . search ( 'idx:users' , '*' , {
98
+ RETURN : "city"
99
+ } ) ;
100
+
101
+ console . log ( citiesResult . total ) ; // >>> 3
102
+
103
+ citiesResult . documents . forEach ( cityDoc => {
104
+ console . log ( cityDoc . value ) ;
105
+ } ) ;
106
+ // >>> {city: 'London'}
107
+ // >>> {city: 'Tel Aviv'}
108
+ // >>> {city: 'Tel Aviv'}
109
+ // STEP_END
110
+ // REMOVE_START
111
+ assert . strictEqual ( 3 , citiesResult . total ) ;
112
+
113
+ citiesResult . documents . sort ( ( a , b ) => a . id < b . id ) ;
114
+ assert . equal ( 'user:1' , citiesResult . documents [ 0 ] . id ) ;
115
+ assert . equal ( 'user:2' , citiesResult . documents [ 1 ] . id ) ;
116
+ assert . equal ( 'user:3' , citiesResult . documents [ 2 ] . id ) ;
117
+ // REMOVE_END
118
+
119
+ // STEP_START query3
120
+ var aggResult = await client . ft . aggregate ( 'idx:users' , '*' , {
121
+ STEPS : [ {
122
+ type : AggregateSteps . GROUPBY ,
123
+ properties : '@city' ,
124
+ REDUCE : [ {
125
+ type : AggregateGroupByReducers . COUNT ,
126
+ AS : 'count'
127
+ } ]
128
+ } ]
129
+ } ) ;
130
+
131
+ console . log ( aggResult . total ) ; // >>> 2
132
+
133
+ aggResult . results . forEach ( result => {
134
+ console . log ( `${ result . city } - ${ result . count } ` ) ;
135
+ } ) ;
136
+ // >>> London - 1
137
+ // >>> Tel Aviv - 2
138
+ // STEP_END
139
+ // REMOVE_START
140
+ assert . strictEqual ( 2 , aggResult . total ) ;
141
+
142
+ aggResult . results . sort ( ( a , b ) => a . city < b . city ) ;
143
+ assert . equal ( 'London - 1' , `${ aggResult . results [ 0 ] . city } - ${ aggResult . results [ 0 ] . count } ` ) ;
144
+ assert . equal ( 'Tel Aviv - 2' , `${ aggResult . results [ 1 ] . city } - ${ aggResult . results [ 1 ] . count } ` )
145
+ // REMOVE_END
146
+
147
+ await client . quit ( ) ;
0 commit comments