Вы не можете сделать это в одном запросе.indexedDB в настоящее время не поддерживает запросы в стиле «ИЛИ».
Альтернативное решение - выполнить один запрос на значение.По сути, для каждого значения используйте getAll в индексе для этого значения, затем объедините все массивы в один массив (возможно, объедините дубликаты).На самом деле у вас не так много обходов с БД, так как вы используете getAll.При настройке этого индекса вы в основном хотите хранить, скажем, «вещи», где каждая «вещь» имеет свойство, такое как «теги», где теги - это массив значений (каждый из которых представляет собой строку).Индекс, который вы создаете для свойства "tags", должен быть помечен как индекс с несколькими записями.
Конечно, существуют творческие хакерские решения.Вот один.Имейте в виду, что это совершенно бесполезно, если у вас есть вещи, которые имеют разные наборы тегов, но вы все равно хотите соответствовать тем, которые разделяют, это будет работать, только если вам не важно, есть ли у какой-либо вещи дополнительные теги.Например, рассмотрим каждый отдельный набор значений, игнорируя порядок.Давайте назовем их группами.Например, foo равно 1, bar - 2, bat - 3, foo-bar - 4, foo-bat - 5, bar-bat - 6 и т. Д. Каждой группе можно дать ключ, например, значение числового счетчика, которое я только что использовал впример.Затем вы можете сохранить групповой ключ как свойство объекта.Каждый раз, когда вы собираетесь сохранить объект, рассчитайте его групповой ключ.Вы можете предварительно рассчитать все групповые ключи или разработать функцию в стиле хеш-функции, которая генерирует конкретный ключ с учетом набора произвольных строковых значений.Конечно, вы платите чуть больше авансом во время хранения и при создании запроса, но вы экономите тонну обработки, потому что indexedDB выполняет всю обработку после этого.Итак, вы хотите простой быстрый хеш.И конечно, это добавляет сложности.Но, возможно, это сработает.Просто найдите простой JS-хэш.Измените его, чтобы лексикографически сохранять значение, установленное перед использованием (чтобы разница в порядке значений не приводила к разнице в значении хеша).Итак, чтобы объяснить более конкретно, для хранилища объектов вещей, у каждого объекта вещей есть свойство, называемое «тег-хэш».Для этого вы создаете базовый индекс (не уникальный, не многократный).Каждый раз, когда вы помещаете вещь в магазин, вы вычисляете значение тега-хэша и устанавливаете значение свойства перед вызовом пут.Затем каждый раз, когда вы хотите выполнить запрос, вы вычисляете хеш массива тегов, по которому вы хотите выполнить запрос, затем вызываете getAll(calculated-hash-value)
, и он выдаст вам все, что имеет эти точные теги.