Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
205 changes: 205 additions & 0 deletions doctests/home-query.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
// EXAMPLE: js_home_query
// BINDER_ID nodejs-js_home_query
// REMOVE_START
import assert from "node:assert";
// REMOVE_END
// STEP_START import
import {
createClient,
SCHEMA_FIELD_TYPE,
FT_AGGREGATE_GROUP_BY_REDUCERS,
FT_AGGREGATE_STEPS,
} from 'redis';
// STEP_END

// STEP_START create_data
const user1 = {
name: 'Paul John',
email: '[email protected]',
age: 42,
city: 'London'
};

const user2 = {
name: 'Eden Zamir',
email: '[email protected]',
age: 29,
city: 'Tel Aviv'
};

const user3 = {
name: 'Paul Zamir',
email: '[email protected]',
age: 35,
city: 'Tel Aviv'
};
// STEP_END

// STEP_START connect
const client = await createClient();
await client.connect();
// STEP_END

// STEP_START cleanup_json
await client.ft.dropIndex('idx:users', { DD: true }).then(() => {}, () => {});
// STEP_END

// STEP_START create_index
await client.ft.create('idx:users', {
'$.name': {
type: SCHEMA_FIELD_TYPE.TEXT,
AS: 'name'
},
'$.city': {
type: SCHEMA_FIELD_TYPE.TEXT,
AS: 'city'
},
'$.age': {
type: SCHEMA_FIELD_TYPE.NUMERIC,
AS: 'age'
}
}, {
ON: 'JSON',
PREFIX: 'user:'
});
// STEP_END

// STEP_START add_data
const [user1Reply, user2Reply, user3Reply] = await Promise.all([
client.json.set('user:1', '$', user1),
client.json.set('user:2', '$', user2),
client.json.set('user:3', '$', user3)
]);
// STEP_END
// REMOVE_START
assert.equal(user1Reply, 'OK');
assert.equal(user2Reply, 'OK');
assert.equal(user3Reply, 'OK');
// REMOVE_END

// STEP_START query1
let findPaulResult = await client.ft.search('idx:users', 'Paul @age:[30 40]');

console.log(findPaulResult.total); // >>> 1

findPaulResult.documents.forEach(doc => {
console.log(`ID: ${doc.id}, name: ${doc.value.name}, age: ${doc.value.age}`);
});
// >>> ID: user:3, name: Paul Zamir, age: 35
// STEP_END
// REMOVE_START
assert.equal(findPaulResult.total, 1);
assert.equal(findPaulResult.documents[0].id, 'user:3');
// REMOVE_END

// STEP_START query2
let citiesResult = await client.ft.search('idx:users', '*',{
RETURN: 'city'
});

console.log(citiesResult.total); // >>> 3

citiesResult.documents.forEach(cityDoc => {
console.log(cityDoc.value);
});
// >>> { city: 'London' }
// >>> { city: 'Tel Aviv' }
// >>> { city: 'Tel Aviv' }
// STEP_END
// REMOVE_START
assert.equal(citiesResult.total, 3);
citiesResult.documents.sort((a, b) => a.value.city.localeCompare(b.value.city));
assert.deepEqual(citiesResult.documents.map(doc => doc.value.city), [
'London',
'Tel Aviv',
'Tel Aviv'
]);
// REMOVE_END

// STEP_START query3
let aggResult = await client.ft.aggregate('idx:users', '*', {
STEPS: [{
type: FT_AGGREGATE_STEPS.GROUPBY,
properties: '@city',
REDUCE: [{
type: FT_AGGREGATE_GROUP_BY_REDUCERS.COUNT,
AS: 'count'
}]
}]
});

console.log(aggResult.total); // >>> 2

aggResult.results.forEach(result => {
console.log(`${result.city} - ${result.count}`);
});
// >>> London - 1
// >>> Tel Aviv - 2
// STEP_END
// REMOVE_START
assert.equal(aggResult.total, 2);
aggResult.results.sort((a, b) => a.city.localeCompare(b.city));
assert.deepEqual(aggResult.results.map(result => result.city), [
'London',
'Tel Aviv'
]);
assert.deepEqual(aggResult.results.map(result => result.count), [
1,
2
]);
// REMOVE_END

// STEP_START cleanup_hash
await client.ft.dropIndex('hash-idx:users', { DD: true }).then(() => {}, () => {});
// STEP_END

// STEP_START create_hash_index
await client.ft.create('hash-idx:users', {
'name': {
type: SCHEMA_FIELD_TYPE.TEXT
},
'city': {
type: SCHEMA_FIELD_TYPE.TEXT
},
'age': {
type: SCHEMA_FIELD_TYPE.NUMERIC
}
}, {
ON: 'HASH',
PREFIX: 'huser:'
});
// STEP_END

// STEP_START add_hash_data
const [huser1Reply, huser2Reply, huser3Reply] = await Promise.all([
client.hSet('huser:1', user1),
client.hSet('huser:2', user2),
client.hSet('huser:3', user3)
]);
// STEP_END
// REMOVE_START
assert.equal(huser1Reply, 4);
assert.equal(huser2Reply, 4);
assert.equal(huser3Reply, 4);
// REMOVE_END

// STEP_START query1_hash
let findPaulHashResult = await client.ft.search(
'hash-idx:users', 'Paul @age:[30 40]'
);

console.log(findPaulHashResult.total); // >>> 1

findPaulHashResult.documents.forEach(doc => {
console.log(`ID: ${doc.id}, name: ${doc.value.name}, age: ${doc.value.age}`);
});
// >>> ID: huser:3, name: Paul Zamir, age: 35
// STEP_END
// REMOVE_START
assert.equal(findPaulHashResult.total, 1);
assert.equal(findPaulHashResult.documents[0].id, 'huser:3');
// REMOVE_END

// STEP_START close
await client.quit();
// STEP_END
Loading