2017-06-05 2 views
1

Ich verwende derzeit einen guid als Schlüsselpfad in meinem Objektspeicher.Verwenden von Datum als Index in IndexedDb und Sortieren

Ich möchte einen Index hinzufügen - created - dass ich dann verwenden kann, um den neuesten Eintrag zu erhalten. Ich habe den Index hinzugefügt: enter image description here

Dies ist, wie ich ursprünglich versucht, den neuesten Eintrag zu erhalten (über getNewest), aber es war nicht wie erwartet funktioniert:

const latestMediaRequest = store.getAll(); 
latestMediaRequest.onsuccess = function (event) { 
     const allData = event.target.result; 
     const targetEntry = allData[allData.length - 1]; // nope    
} 

Dies ist, wie ich bin zur Zeit Hinzufügen von Einträgen (Arbeits):

const request = database.transaction(storeName, "readwrite") 
       .objectStore(storeName) 
       .add(dbEntry); // contains "created" timestamp 

Und das ist, wie ich durch guid bekommen (in Betrieb):

const request = database.transaction(storeName, "readwrite") 
       .objectStore(storeName) 
       .get(mediaId); 

Ich habe den Index hier erstellt:

  request.onupgradeneeded = function (event) { 
       const db = event.target.result; 
       if (db.objectStoreNames.contains(storeName)) { 
        db.deleteObjectStore(storeName); 
       } 
       const objectStore = db.createObjectStore(storeName, { keyPath: keyPath }); 
       objectStore.createIndex("created", "created", { unique: false }); 
      }; 

Wie kann der getNewest Schnipsel modifiziert wird im Auftrag eines Datumsindex zur Unterstützung holen? Ich verwende dies, um die ältesten Elemente rekursiv zu löschen - so kann ich nicht einfach einen einzigen Eintrag "lastAdded" speichern.

Antwort

0

Dies hat den Trick:

// "created" 
const latestMediaRequest = store.index(dateIndex).openCursor(); 
latestMediaRequest.onsuccess = function (event) { 
    const targetEntry = event.target.result.value; 
} 
+2

'Opencursor (null, 'zurück')' nach dem letzten Tag starten – Josh