8
votes

Indexeddb: Comment limiter le nombre d'objets retournés?

J'utilise un curseur avec une requête à portée limitée inférieure. Je ne trouve pas un moyen de restituer le nombre d'objets retournés, semblables à une clause "Limite n" dans une base de données.

var keyRange = IDBKeyRange.lowerBound('');


0 commentaires

3 Réponses :


0
votes

Vous pouvez même rechercher par plage dans indexeddb avec idbkeyrange.bound fonction xxx

Vous pouvez définir la valeur de démarrage, la valeur finale et si vous devez inclure le début. et la valeur finale dans les éléments retournés. Dans mon cas, je veux la première valeur de la gamme, mais je souhaite exclure la dernière valeur.

Pour plus de détails sur idbkeyrange, veuillez visiter le w3c indexeddddb page


3 commentaires

Merci mais ce n'est pas ce que j'ai demandé: je veux lier (0, infini) mais renvoyer seulement le premier n


Pourquoi voulez-vous énumérer tous les articles si vous n'en avez pas besoin? Vous pouvez répertorier les premiers n articles avec idbkeyrange.bound (0, n, false, vrai);


Je n'ai aucun moyen de définir la limite supérieure à seulement retourner 5, la valeur étant interrogée n'est pas une séquence



10
votes

Lorsque vous êtes itération des résultats, vous pouvez vous arrêter à tout moment. Quelque chose comme ça devrait fonctionner: xxx

De plus, dans le cas particulier où vous sélectionnez sur la base d'une touche composée de numéros séquentiels, vous pouvez utiliser un porte-clés pour renvoyer explicitement seulement une certaine gamme. Mais ce n'est généralement pas le cas.


5 commentaires

Exactement, ce n'est pas mon cas. J'ai mis en œuvre ce que vous décrivez ci-dessus mais dans mon cas, l'objet Store est assez grand, il est donc vraiment idiot de récupérer toutes les données de celle-ci ... D'où ma question ...


Le code que j'ai publié ne récupère pas toutes les données, juste les 20 premiers objets.


Oui, vous avez raison mais c'est le curseur en streaming les données de la DB? Il peut tout faire de précharger avant de le gérer sur le moteur JS. Par exemple, le pilote MySQL pour Java fait cela.


Non que j'ai étudié le code source de Chrome et Firefox pour valider cela, mais il est censé être en train de diffuser les données à mesure que vous le demandez. Je serais assez surpris si ce n'était pas le cas.


Chrome utilise des heuristiques pour précharger jusqu'à 100 objets.



2
votes

une solution importante sa remplaçante: xxx

pour xxx

N'oubliez pas que son appel ASYNC, et il pourrait s'agir d'ajouter des éléments sur "Résultats" en même temps et "i" n'aurait pas la valeur appropriée.


0 commentaires