La casse de la recherche dans indexedDB
-
14-12-2019 - |
Question
Quelqu'un peut-il me dire si il est possible d'exécuter la casse de la recherche sur indexeddb magasin d'objets à l'aide de l'index, openCursor et keyRange....
Je peux le faire à la casse et a réussi à mettre en place quelque chose à l'aide de toUpperCase fonction, mais il ya tellement de différents varaitions qu'il n'est pas possible relly...
Tout d'aider les bienvenues...Merci...Exemple d'une tentative:
var transaction = db.transaction("products", IDBTransaction.READ_ONLY);
var store = transaction.objectStore("products");
var descIndex = store.index('Index1');
var boundKeyRangeUpper = IDBKeyRange.bound(request.term.toUpperCase(), (request.term.toUpperCase()+'Z'));
descIndex.openCursor(boundKeyRangeUpper).onsuccess = function (e)
Mise à JOUR
C'est ce que j'ai fini par mettre en place:Quatre plages de la couverture et de la possibilité, c'est à direFA,fA,Fa,fa...Cela se fait sur la première lettre c'est à dire'F'
var boundKeyRangeUpper = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'Z');
var boundKeyRangeUpper2 = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'z');
var boundKeyRangeLower = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'z');
var boundKeyRangeLower2 = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'Z');
Les résultats des recherches ci-dessus est stocké dans un autre objectStore, mais avec leur description en majuscules donc, de POISSONS, de FRUITS, de la SALADE FRAÎCHE...Maintenant, si une lettre est tapée après F par exemple"r" à la recherche de ce nouvel objet magasin où tout est en majuscules...Ce n'est pas une solution idéale, de loin, mais il fonctionne, et il est rapide pour mes besoins...Peut-être nous aurons cas insensative recherche finalement, peut-être pas...
La solution
Je recommande de modifier la structure de l'objet en magasin, c'est par l'ajout d'une colonne (c'est à direune propriété pour chaque objet dans le magasin), avec la même valeur de la clé, MAIS pour les majuscules, puis faire de cette nouvelle propriété de la clé à la place.
//object
var lang = {
name: 'Javascript',
keyName: '', //THE NEW PROPERTY - KEY OF THE OBJECTSTORE
interest: 100
};
lorsque vous ajoutez un objet à la boutique de modifier la nouvelle propriété avec la majuscule du nom (ou du terme ou quoi que ce soit), de sorte l'objet sera:
//object
var lang = {
name: 'Javascript',
keyName: 'JAVASCRIPT', // NEW PROPERTY MODIFIED TO UPPERCASE OF OLD KEY
interest: 100
};
ensuite, passez à votre code.
Autres conseils
Dexie.js fait un excellent travail à la recherche insensible à la casse sans index supplémentaire.
La raison pour laquelle vous voyez ce que vous voyez, c'est que les curseurs sont IndexedDB lexicographiquement triés.
En vertu de ce changement de paradigme, un > A, contrairement à le tri par ordre alphabétique qui ressemble plus à ce que vous recherchez.
Pour réaliser le tri par ordre alphabétique, vous auriez à curseur à travers tous les enregistrements de votre lexicographiques de tri (jusqu'à ce que vous obtenez la valeur null comme event.target.result
dans votre onsuccess
), en ajoutant les résultats mondiale partagée et puis, à la fin de la lexicographiques de tri, de retour d'un tri alphabétique de vos communs à l'échelle mondiale.