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...

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top