10
votes

Compter le nombre d'enregistrements dans un magasin d'objets dans indexeddB

Je veux que de base compter le nombre d'enregistrements dans ma base de données indexeddb.

Actuellement, mon code ressemble à

JavaScript xxx

J'adorerais pour cela pour dire que cela dit que ça veut dire seulement 3, mais Au lieu de cela, je reçois.

Sortie xxx

ce qui est correct mais je veux juste qu'il ne soit pas chargé d'autres choses.


1 commentaires

Juste pour clarifier, vous souhaitez compter le nombre d'objets dans votre ObjectStore plutôt que la base de données ? Vous pouvez compter le nombre de Objectstores au niveau de la base de données mais pas d'objets eux-mêmes.


3 Réponses :


3
votes

Un peu d'introduction dans l'ordre. De mon Documents personnels sur transactions:

Certaines transactions Données de retour, ou "résultats", de la base de données. Ces transactions sont appelées «demandes» et à l'exception de Ouverture de la base de données, les valeurs sont toujours diverses combinaisons d'objet "Keys" et "valeurs" et instances d'idbrequest. Demander des transactions sont juste que: une demande de transaction », à savoir l'acte de demander quelque chose plutôt que de l'obtenir. Un programmeur les rencontre Lorsque vous traitez avec des objets IDBObjectStore, IDBIDEX ou IDBCursor.

Ce que vous cherchez est un objet idbrequest , qui est renvoyé par la méthode compteur () . Qui représente la demande de données, et non les données elles-mêmes.

Les données elles-mêmes sont disponibles après les incendies de code et sont accessibles via le idbrequest.result Propriété.

Voici une méthode de comptage testée de ma bibliothèque, Dash : xxx

Je dois noter que j'aurais probablement besoin d'utiliser le Evénement plutôt que l'événement succès . Je ne peux pas expliquer pourquoi mais parfois les valeurs de résultats ne sont pas disponibles dans Succès Callbacks.


9 commentaires

Pourriez-vous expliquer comment implémenter cela dans mon code? Je vous remercie vraiment de prendre le temps d'expliquer votre réponse


Bien sûr! Je pense que vous voulez attacher un rappel à la transaction que vous avez créée et écoute pour son achèvement. Puis atteindre dans événement.Result et vous devez trouver un entier représentant le nombre d'objets: Gist.github.com/editor/21AEEFD96E6B853C5671


Lorsque j'essaye cela, je suis compté indéfini, je vais essayer de le déboguer


J'ai choqué sur le gist. Essayez de vérifier comte.result (il devrait être mis à jour maintenant). C'est le idbrequest qui a une valeur, pas l'événement.


Boom, toi Dieu! Merci. Je viens de recoder un site Web localStorage et de tout convertir. Indexeddb semble vraiment bon juste qu'allot d'apprendre, je suppose mais avec la quantité de stockage, je suppose que c'est va être utile beaucoup plus!


Voici à espérer. Suivez-moi sur Twitter si vous voulez plus de nouvelles idb. Essayer d'aider à créer une communauté autour des gens à l'aide de la technologie


Je vais m'assurer de garder mes yeux ouverts, je vais essayer de rester actif sur cette section. Suivi :)


"Parfois, les valeurs de résultats ne sont pas disponibles" peuvent être liées à ce numéro lis.w3.org/archives/public/public-webapps/2014Janmar/... Je préfère comme comportement actuel, c'est-à-dire que vous devez utiliser la transaction complète pour obtenir un résultat défini. Mais le gain de performance n'est pas ignorable.


Votez-le parce que cela ressemble davantage à une promotion de la propre bibliothèque du répondant qu'une véritable réponse à la question de l'OP.



6
votes

Essayez quelque chose comme ceci:

var transaction = db.transaction(["data"], "readonly");
var objectStore = transaction.objectStore("data"); 
var count = objectStore.count();

count.onsuccess = function() {
    console.log(count.result);
};


2 commentaires

Est Var Cursor = ObjectStore.Opençage (); obligatoire? +1 pour l'ouvrir à la lecture-là.


Pour itération à travers les objets uniquement, le curseur est requis .. Ici, il n'est pas nécessaire.



13
votes

ramener le compte d'enregistrement avec un peu moins de code: xxx


0 commentaires