Am working with Forge UI KIT
I saved two records to storage
await storage.set('mykey1', {first_name: 'Frank', last_name: 'James', department: 'chemistry' });
await storage.set('mykey2', {first_name: 'john', last_name: 'carrot', department: 'chemistry' });
//const data = await storage.get('mykey');
Here is my issue:
I need to select the two records by department fields using where clause Eg
select * from storage where department = 'chemistry';
To this effect, I have tried something like
const data = await storage
.query()
.where('department', startsWith('chemistry'))
.getMany();
Here is the error that it showed
Error: The field “department” is not supported for filters.
Please what is the best way to query the records.
Hey @EsedoFredrick,
You currently can only query storage by the key
. You can’t query the payload itself.
Like @danielwinterw said, you can only query the storage by key
right now.
If possible and if it makes sense to your usage, you could append a department acronym or “key” to your records’ keys.
Quick example of a key from the top of my head: CHEM-myKey1
.
The query could be something like…
// await storage.query().where('key', startsWith('CHEM')).getMany();
await storage.query().where('key', startsWith(departmentKey)).getMany();
This comes with a load of extra management and issues (so be certain to manage edge cases if you’re going that route) but it is a way to circumvent the current very limited APIs provided with Forge Storage.
Best of luck,
1 Like
Thanks for getting back to me @danielwinterw @PascalPerreault .
query code below not working at all
const data = await storage.query().where('key', startsWith('SHAGG')).getMany();
Here is what I have done again.
I have save the data as arrays as per code below
await storage.set('SHAGG-myKey4', [{first_name: 'rahul', last_name: 'jack', age: '21'}]);
await storage.set('SHAGG-myKey5', [{first_name: 'vasu', last_name: 'vijah', age: '18'}]);
query the record as per below
const data = await storage.query().where('key', startsWith('SHAGG')).getMany();
return data;
Here is how I try to map the array result
{contents.map(con => {
return (
<Fragment>
<Text>First Name : {con.first_name}</Text>
<Text>Last Name pp: {con.last_name}</Text>
</Fragment>
)
})}
I need to display all the results but it throws error
map undefined.
it seems the line of code below has an issue
const data = await storage.query().where('key', startsWith('SHAGG')).getMany();
if I try using code below
const data = await storage.get('SHAGG-myKey4');
it will work but only display one result where key is SHAGG-myKey4
please help me out. Thanks
Hi again,
Using getMany()
actually returns an object with an array named results
in which each result is a key-value pair of the obtained record.
Try something like (but don’t take my code for granted):
const data = await storage.query().where('key', startsWith('SHAGG')).getMany();
return data.results.map(storageFound => storageFound.value);
1 Like