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