[英]Query using multiple conditions
我最近发现(遗憾的是)HTML5不再支持WebSQL,而且IndexedDB将替代它。
我想知道是否有任何方法可以查询或搜索IndexedDB的条目,方式与我如何使用SQL搜索满足多个条件的条目类似。
我已经看到我可以使用KeyRange的一个条件搜索IndexedDB。 但是,我似乎无法找到任何方法来搜索两列或更多列数据,而无需从数据库中获取所有数据并使用for循环执行此操作。
我知道这是一个新功能,几乎没有在浏览器中实现,但我有一个项目,我正在开始,我正在研究我可以做的不同方式。
谢谢!
看看这个问题的答案 。 它比我在这里给出的答案更详细。 store.createIndex和IDBKeyRange方法的keypath参数可以是一个数组 。 粗略的例子:
// In onupgradeneeded
var store = db.createObjectStore('mystore');
store.createIndex('myindex', ['prop1','prop2'], {unique:false});
// In your query section
var transaction = db.transaction('mystore','readonly');
var store = transaction.objectStore('mystore');
var index = store.index('myindex');
// Select only those records where prop1=value1 and prop2=value2
var request = index.openCursor(IDBKeyRange.only([value1, value2]));
// Select the first matching record
var request = index.get(IDBKeyRange.only([value1, value2]));
假设您的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的更多信息
是的,在索引上打开连续键范围几乎与indexedDB相同。 在IndexedDB中无法测试多个条件。 它必须在游标循环上完成。
如果您找到解决方案,请告诉我。
顺便说一句,我认为循环游标可能非常快,并且需要比Sqlite更少的内存。
我迟了几年,但我只想指出Josh的答案是假设条件中的所有“列”都是索引的keyPath
的keyPath
。
如果索引的keyPath
之外存在任何所述“列”,则必须在示例中创建的光标迭代的每个条目上测试涉及它们的条件。 因此,如果您正在处理此类查询,或者您的索引不是unique
,请准备编写一些迭代代码!
在任何情况下,如果您可以将查询表示为布尔表达式,我建议您查看BakedGoods 。
对于这些类型的操作,除非你正在执行严格的相等查询( x ===? y
,给定x是objectStore或索引键),它总是会在焦点objectStore上打开一个游标,但它会省去你的麻烦编写自己的游标迭代代码:
bakedGoods.getAll({
filter: "keyObj > 5 && valueObj.someProperty !== 'someValue'",
storageTypes: ["indexedDB"],
complete: function(byStorageTypeResultDataObj, byStorageTypeErrorObj){}
});
只是为了完全透明,BakedGoods由moi维护。
我在回答这个问题时提到了一些查询关系的建议,这可能是有意义的:
至于一次查询多个字段,看起来在IndexedDB中看起来没有本地方法(我可能是错的;我还是新手),但你当然可以创建一个单独使用的辅助函数每个字段的游标,并迭代它们以查看哪些记录符合所有条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.