When sorting on a text field, capital letters are given a priority over lowercase, meaning AB sorts before Aa. Is there a way to make the sort case insensitive?
Hello @innes,
Would you be able to share your query/code? I would be able to provide a better solution based on your implementation.
Sure thing…
const data = await builder.getAll('logo', {
limit: 10,
options: {
sort: {
data: { company: 1 }
},
noTargeting: true,
}
});
For the text field company, values starting with AB
will sort before values starting with Aa
. Same results in the API explorer.
https://cdn.builder.io/api/v3/content/logos?apiKey=&limit=3&sort.data.company=1
Getting AB, Aa, Ac …
Hello @innes,
The current version of the Content API does not yet provide built-in functionality for specifying case sensitivity within the query. However, you can achieve case insensitivity by parsing the results as demonstrated in the example below.
data = data.results.sort(function(a, b){
const companyA = a.data.company.toUpperCase(); // ignore upper and lowercase
const companyB = b.data.company.toUpperCase(); // ignore upper and lowercase
if(companyA < companyB) {
return -1;
}
if(companyA> companyB){
return 1;
}
return 0;
});
console.log(data)
If a post-query approach is not feasible for your use case, please let me know, and I’ll be more than happy to assist you in finding a suitable workaround or explore other options.
Thanks, the maximum results I’m getting out is 100, as we recommend Builder as a solution, I can definitely see needing to sort more than 100 items alphabetically in a case-insensitive sort. What are the options for doing this that don’t involve paging through an entire content model and sorting locally?
Hello @innes
If I understand correctly, you’re wanting to avoid receiving multiple arrays from each call that only returns 100 results each?
I was able to locate the following forum post that I believe answers your question. The post also provides a solution that returns a single array with all the results.
https://forum.builder.io/t/whats-the-maximum-limit-allowed-in-a-single-content-api-call/310
Please let me know if I’m misunderstanding or if I may be able to help get closer to a more satisfactory solution.
I get that we can make an array from multiple calls, I’m wondering if that can be avoided, it’s inefficient to do that just to perform a basic sort.
Case-insensitive sort should be the default, I think that’s the most common use case.