2016-05-18 15 views
1

ich einen Mock habe bis IndexedDB hält Produkte wie:Warum kann ich nicht das korrekte Ergebnis durch die Funktion IDBKeyRange.bound in IndexedDB erhalten?

{ 
id:1002, 
name:"Frank", 
company: "dg", 
age:30 
} 

Und ich habe den Index [ ‚name‘, ‚Alter‘, ‚Unternehmen‘] erstellt, wollen einfach nur das Ergebnis erhalten Ich brauche wie Websql tun.

getMultipleDataByRangeFunktion definiert Elemente zu erhalten, habe ich ['0',24,'ef'] als lowerBound und ['z',24,'ef'] als upperBound, dachte ich es mir das Ergebnis zeigen, sollten die Elemente entsprechen, die 24 Jahre alt ist und dessen Firma „ef“. Aber das Ergebnis zeigt, dass alle Artikel den von mir festgelegten Bereich erreichen. Wie kann ich den Bereich einstellen, um das richtige Ergebnis zu erhalten?

-Code kann auch durch JSBIN Link zu überprüfen I erzeugt:

http://jsbin.com/sinuxa/edit?js,console

Antwort

3

Es wird funktionieren, wenn Sie die Reihenfolge des Index so ändern, dass der Teil, der (Name) variiert am Ende ist. Wenn Sie wissen möchten, warum, finden Sie unter In IndexedDB, is there a way to make a sorted compound query? für eine Erklärung, wie Verbundindizes in IndexedDB funktionieren.

+0

Danke, ich habe die Q & A gesehen, die Sie zuvor erwähnt haben. Ich habe mich nur gefragt, ob es eine Möglichkeit gibt, das Endergebnis zu erhalten, ohne die Reihenfolge meines Index zu ändern, um zu vermeiden, dass mehr unterschiedliche geordnete Indizes erstellt werden, um unterschiedliche Bedingungen zu erfüllen. – Jin

+0

Außerdem überprüfe ich den "N-dimensionalen Weg" über diesen Link (https://gist.github.com/inexoretetash/704e9688f99ac12dd336), aber ich denke, es wird nicht funktionieren, wenn Streicher eingemischt werden, weil das schwer ist Legen Sie den Bereich der Zeichenfolgen fest. Außerdem habe ich einige hässliche Methoden wie das Speichern des Ergebnisses für jede Bedingung in verschiedenen Arrays überprüft und dann die Schnittmenge erhalten. Das ist nicht elegant und ineffizient, wenn die db größer wird. – Jin

+0

Dieser Kern (ich bin der Autor) sollte für Ihren Fall arbeiten. Vereinbart, dass die Einstellung von String-Bereichen subtil ist. Für "any string" können Sie '' to [] verwenden (leere Zeichenfolge ist zuerst, Array ist höher als jeder String. Für String-Präfixe können Sie zB 'a' bis 'a \ uFFFF' für jede Zeichenfolge verwenden, die mit einem beginnt (außer \ uFFFF ist gültig, dann müssen Sie den Nachfolgertrick von https://gist.github.com/inexorrettash/5462871) verwenden. –