Giter Club home page Giter Club logo

Comments (4)

schmod avatar schmod commented on July 23, 2024 1

@MrFurther Did you ever resolve your issue? Can we close this?

from angular-indexeddb.

schmod avatar schmod commented on July 23, 2024

I just did a quick check against my own code (which uses multiple indices), and this seems to be working correctly.

Looking at the source code, Query::$index() is very straightforward, and just sets an indexName parameter on the Query:

      $index: (indexName) ->
        @indexName = indexName
        this

eachWhere() is similarly straightforward, and calls store.index(indexName) if indexName is not falsy. (Note that store.index() is a native function provided by the browser, and is indeed the method that we'd want to be calling here)

eachWhere: (query) ->
    defer = @defer()
    indexName = query.indexName
    keyRange = query.keyRange
    direction = query.direction
    req = if indexName
      @store.index(indexName).openCursor(keyRange, direction)
    else
      @store.openCursor(keyRange, direction)
    @_mapCursor(defer, ((cursor) -> cursor.value), req)
    defer.promise

If you're not familiar with CoffeeScript, the compiled JS is very straightforward:

req = indexName ? this.store.index(indexName).openCursor(keyRange, direction) : this.store.openCursor(keyRange, direction);

I stepped through my own code in a debugger, and store.index() does indeed get called with the correct index name.

A slightly-modified version of my code is as follows:

$indexedDB.openStore('myStore', store => {
    var query = store.query().$index('expiration').$lt(oldest);
    return store.findWhere(query).then(items => {
        console.log(items);
    });
});

Mind sharing the portion of code where you create this index and/or add records? I think something else is going wrong here.

from angular-indexeddb.

MrFurther avatar MrFurther commented on July 23, 2024

@schmod many thanks for taking a look!

Here's the part creating the index:

var objStore = db.createObjectStore('records', {keyPath: 'ssn', autoIncrement: true});
objStore.createIndex('date_idx', 'date', {unique: false});
objStore.createIndex('pax_idx', 'pax', {unique: false}, {multiEntry: true});

And here's how I add the records:

$scope.addRecord = function (records) {
  $indexedDB.openStore('records', function(store){
    $scope.newrecord = {
      "pax": $scope.paxlist,
    }
    store.insert($scope.newrecord).then(function(e){});
};

As you can see on the pic, the pax_idx contains the array as key with strings as values. Even so when I do the query I get empty array as result.

issue

from angular-indexeddb.

schmod avatar schmod commented on July 23, 2024

The entire paxList array is getting stored as your key, which probably isn't what you want.

objStore.createIndex('pax_idx', 'pax', {unique: false}, {multiEntry: true});

needs to change to:

objStore.createIndex('pax_idx', 'pax', {unique: false, multiEntry: true});

at which point, "Anna", "John", and "Martha" should all be individual keys in pax_idx.

from angular-indexeddb.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.