consider these values in a table

var values = [
    {
        name: "Ray",
        tags: ["apple", "banana", "beer"]
    },
    {
        name: "Scott",
        tags: ["beer"]
    }, 
    {
        name: "Marc",
        tags: ["mongo", "jenkins","jsstore"]
    }
];

now you want to fetch records whose tags is 'mongo'. So a simple select query will be -

const results = await connection.select({
    from: 'people',
    where: {
        tags: 'mongo'
    }
});

Here results will be always empty array, because indexeddb does not know anything about 'mongo' since it has stored an array value.

In order to solve this problem - IndexedDb provides an option 'multi entry'.

MultiEntry lets you search inside a column with array values. MultiEntry creates index for each item in array value.


In this case - you will have to enable multiEntry option for column "tags".

Here is an example database schema -

var people = {
    name: 'people',
    columns: {
        name: {
            unique: true,
            dataType: JsStore.DATA_TYPE.String
        },
        tags: {
            dataType: JsStore.DATA_TYPE.Array,
            multiEntry: true
        }
    }
};

var dataBase = {
    name: 'MultiEntryTest',
    tables: [people]
};

Note :- multiEntry will only work for plain values i.e string, number but not for compound types like json data or array. Because indexedDb provides one level indexing only.