indexeddb中的where子句的等效项

时间:2012-11-22 16:40:17

标签: where-clause indexeddb

假设我们为todolist建立了一个数据库,并希望查询所有重要且尚未完成的项目。在SQL中,我将使用类似

的内容
SELECT * FROM todolist WHERE important = true AND state <> 'done'

我们如何在indexeddb nosql数据库中执行该类型的请求? 有索引吗? 其他方式? 不可能?

我知道要在important = true上过滤结果:

objectstore.index('important').openCursor(IDBKeyRange.only('true'))

但我不知道如何过滤state <> 'done',因为我们只有IDBKeyRange.only(z)

我不知道如何过滤这两个条款。

N.B。 :在MongoDB中我们做:

db.userdetails.find({"date_of_join" : "16/10/2010","education":"M.C.A."})

3 个答案:

答案 0 :(得分:6)

在onupgradeneeded中,为使用数组的条件创建索引:

todolistStore.createIndex('importantIncomplete', ['important','state'],{unique:false});

对于您的查询,请执行以下操作:

var lowerBound = ['true','started'];
var upperBound = ['true','almostdone'];
var range = IDBKeyRange.bound(lowerBound,upperBound);
var request = todolistStore.index('importantIncomplete').openCursor(range);

答案 1 :(得分:1)

在IndexedDB中查询多个索引有两种方法。 Josh描述了使用复合索引查询多个字段的最快方法。但是它存储成本和写入速度变慢。另外,必须先验地查询查询,因此根据需要创建索引。第二种方法是使用排序合并或其他算法的手动密钥连接。此方法需要感兴趣的字段上的索引(非复合)并处理所有组合查询。请参阅此处http://dev.yathit.com/ydn-db/nosql-query.html,了解ydn-db库中的排序合并,嵌套循环和zigzag合并实现。我参加了添加更多关键连接算法。

BTW,通常我们不索引布尔值。如果您的查询字段是布尔数据类型,则只进行表扫描。没有指向使用索引。

答案 2 :(得分:-3)

您需要索引,并且可以使用游标检索数据,您可以在其中提供一个过滤器。

在我的博客(http://www.kristofdegrave.be/2012/01/indexed-db-reading-multiple-records.html?m=1)上,您可以找到更多有关它的信息。