javascript - span - js title attribute




Запрос с использованием нескольких условий (4)

Да, открытие непрерывного диапазона клавиш по индексу в значительной степени соответствует индексированномуDB. Тестирование для нескольких условий невозможно в IndexedDB. Это необходимо сделать в цикле курсора.

Если вы найдете решение, сообщите мне.

Кстати, я думаю, что курсор может быть очень быстрым и требует меньше памяти, чем возможно с Sqlite.

https://code.i-harness.com

Недавно я обнаружил (к сожалению), что WebSQL больше не поддерживается для HTML5, и вместо этого IndexedDB будет его заменять.

Мне интересно, есть ли способ запросить или выполнить поиск по элементам IndexedDB аналогично тому, как я могу использовать SQL для поиска записи, удовлетворяющей нескольким условиям.

Я видел, что я могу искать через IndexedDB, используя одно условие с KeyRange. Однако я не могу найти способ поиска двух или более столбцов данных без захвата всех данных из базы данных и выполнения их с помощью циклов.

Я знаю, что это новая функция, которая едва реализована в браузерах, но у меня есть проект, который я запускаю, и я исследую различные способы, которыми я мог бы это сделать.

Спасибо!


Предположим, что ваш SQL-запрос похож на:

SELECT * FROM TableName WHERE Column1 = 'value1' AND Column2 = 'value2'

Эквивалентный запрос в библиотеке JsStore :

var Connection = new JsStore.Instance("YourDbName");
Connection.select({
    From: "YourTableName"
    Where: {
        Column1: 'value1',
        Column2: 'value2'
    },
    OnSuccess:function (results){
        console.log(results);
    },
    OnError:function (error) {
        console.log(error);
    }
});

Теперь, если вам интересно, что такое JsStore, позвольте мне сказать вам, что это библиотека, которая упростит запрос IndexedDB. Нажмите здесь, чтобы узнать больше о JsStore


Я пару лет опаздываю, но я хотел бы отметить, что ответ Джоша работает над предположением, что все «столбцы» в состоянии являются частью keyPath .

Если какой-либо из указанных «столбцов» существует за пределами keyPath индекса, вам придется протестировать условия, связанные с ними, на каждой записи, которую создает курсор, созданный в примере. Поэтому, если вы имеете дело с такими запросами или ваш индекс не unique , будьте готовы написать некоторый итерационный код!

В любом случае, я предлагаю вам проверить BakedGoods если вы можете представить свой запрос как логическое выражение.

Для этих типов операций он всегда будет открывать курсор на объекте focusStore, если вы не выполняете строгий запрос равенства ( x ===? y , если x является объектным или индексным ключом), но это избавит вас от проблем написание собственного кода итерации курсора:

bakedGoods.getAll({
    filter: "keyObj > 5 && valueObj.someProperty !== 'someValue'",
    storageTypes: ["indexedDB"],
    complete: function(byStorageTypeResultDataObj, byStorageTypeErrorObj){}
});

Только для полной прозрачности, BakedGoods поддерживается moi .


Я упоминаю некоторые предложения для запроса отношений в моем ответе на этот вопрос, который может представлять интерес:

Концептуальные проблемы с IndexedDB (отношения и т. Д.)

Что касается запроса сразу нескольких полей, это не похоже на то, что в IndexedDB есть собственный способ сделать это (я мог ошибаться, я все еще новичок в этом), но вы могли бы создать вспомогательную функцию, которая использовала отдельную курсор для каждого поля и повторил их, чтобы увидеть, какие записи соответствуют всем критериям.





indexeddb