1
0
mirror of https://github.com/redis/node-redis.git synced 2025-12-09 21:21:11 +03:00

docs: DOC-5841 added index/query doc page examples (#3109)

This commit is contained in:
andy-stark-redis
2025-10-29 08:51:55 +00:00
committed by GitHub
parent 57638055dc
commit 2d5e2bada3

205
doctests/home-query.js Normal file
View File

@@ -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: 'paul.john@example.com',
age: 42,
city: 'London'
};
const user2 = {
name: 'Eden Zamir',
email: 'eden.zamir@example.com',
age: 29,
city: 'Tel Aviv'
};
const user3 = {
name: 'Paul Zamir',
email: 'paul.zamir@example.com',
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