0

Suppose i have a table in indexdb which has two columns - name and salary and i have seperate index on both.

now i have obtained result using cursor and range on index name like this -

var value ="ujjwal";
var trans = db.transaction(['employee'], "readonly");
var store = trans.objectStore('employee');
var index = store.index('name');

var cursorRequest = index.openCursor(IDBKeyRange.only(value)),
res = new Array();

cursorRequest.onsuccess = function(e) {

    var cursor = e.target.result;
    if (cursor) {
        res.push(cursor.value);
        cursor.continue();
    }
};

so now i got multiple results. How can i sort them on salary.

I want to do this using IndexedD.I have already index on salary column.

Ujjwal Kumar Gupta
  • 2,308
  • 1
  • 21
  • 32
  • This may be helpful https://stackoverflow.com/questions/12084177/in-indexeddb-is-there-a-way-to-make-a-sorted-compound-query – Tanya Gupta Jan 26 '18 at 23:54

1 Answers1

0

Check out some documentation on Array.prototype.sort

Edit, based on your comment, something like this then:

function myOnUpgradeNeeded(event) {
  var db = event.target.result;
  var store = db.createObjectStore('employee');
  store.createIndex('name-salary-index', ['salary', 'name']);
}

function findByNameOrderBySalary(db, name, callback) {
  var tx = db.transaction('employee');
  var store = tx.objectStore('employee');
  var index = store.index('name-salary-index');

  var lowerBound = [Number.NEGATIVE_INFINITY, name];
  var upperBound = [Number.POSITIVE_INFINITY, name];
  var range = IDBKeyRange.bound(lowerBound, upperBound);
  var request = index.getAll(range);
  request.onsuccess = function(event) {
    var employeeArray = event.target.result;
    callback(employeeArray);
  };
  request.onerror = function(event) {
    console.log('Error occurred', event.target.error);
    callback([]);
  };
}
Josh
  • 17,834
  • 7
  • 50
  • 68