繁体   English   中英

使用多个条件查询

[英]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的答案是假设条件中的所有“列”都是索引的keyPathkeyPath

如果索引的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的概念问题(关系等)

至于一次查询多个字段,看起来在IndexedDB中看起来没有本地方法(我可能是错的;我还是新手),但你当然可以创建一个单独使用的辅助函数每个字段的游标,并迭代它们以查看哪些记录符合所有条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM