Skip to content

Commit 8824115

Browse files
DOC-4345 added testable JSON index/query example
1 parent c1edc2e commit 8824115

File tree

1 file changed

+147
-0
lines changed

1 file changed

+147
-0
lines changed

doctests/home-json.js

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
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

Comments
 (0)